mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-06-17 06:31:07 +00:00
add contract name to integration to integration test cases
Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"Baseline": 3917,
|
"Baseline": 3917,
|
||||||
"Computation": 7363,
|
"Computation": 7363,
|
||||||
"DivisionArithmetics": 43028,
|
"DivisionArithmetics": 42649,
|
||||||
"ERC20": 53019,
|
"ERC20": 53193,
|
||||||
"Fibonacci": 5965,
|
"FibonacciIterative": 5965,
|
||||||
"Flipper": 4336,
|
"Flipper": 4336,
|
||||||
"SHA1": 35878
|
"SHA1": 36053
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ use alloy_sol_types::{sol, SolCall};
|
|||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Contract {
|
pub struct Contract {
|
||||||
|
pub name: &'static str,
|
||||||
pub evm_runtime: Vec<u8>,
|
pub evm_runtime: Vec<u8>,
|
||||||
pub pvm_runtime: Vec<u8>,
|
pub pvm_runtime: Vec<u8>,
|
||||||
pub calldata: Vec<u8>,
|
pub calldata: Vec<u8>,
|
||||||
@@ -107,6 +108,7 @@ impl Contract {
|
|||||||
let name = "Baseline";
|
let name = "Baseline";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Baseline::baselineCall::new(()).abi_encode(),
|
calldata: Baseline::baselineCall::new(()).abi_encode(),
|
||||||
@@ -118,6 +120,7 @@ impl Contract {
|
|||||||
let name = "Computation";
|
let name = "Computation";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Computation::odd_productCall::new((n,)).abi_encode(),
|
calldata: Computation::odd_productCall::new((n,)).abi_encode(),
|
||||||
@@ -129,6 +132,7 @@ impl Contract {
|
|||||||
let name = "Computation";
|
let name = "Computation";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Computation::triangle_numberCall::new((n,)).abi_encode(),
|
calldata: Computation::triangle_numberCall::new((n,)).abi_encode(),
|
||||||
@@ -140,6 +144,7 @@ impl Contract {
|
|||||||
let name = "FibonacciRecursive";
|
let name = "FibonacciRecursive";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: FibonacciRecursive::fib3Call::new((U256::from(n),)).abi_encode(),
|
calldata: FibonacciRecursive::fib3Call::new((U256::from(n),)).abi_encode(),
|
||||||
@@ -151,6 +156,7 @@ impl Contract {
|
|||||||
let name = "FibonacciIterative";
|
let name = "FibonacciIterative";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: FibonacciIterative::fib3Call::new((U256::from(n),)).abi_encode(),
|
calldata: FibonacciIterative::fib3Call::new((U256::from(n),)).abi_encode(),
|
||||||
@@ -162,6 +168,7 @@ impl Contract {
|
|||||||
let name = "FibonacciBinet";
|
let name = "FibonacciBinet";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: FibonacciBinet::fib3Call::new((U256::from(n),)).abi_encode(),
|
calldata: FibonacciBinet::fib3Call::new((U256::from(n),)).abi_encode(),
|
||||||
@@ -173,6 +180,7 @@ impl Contract {
|
|||||||
let name = "SHA1";
|
let name = "SHA1";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: SHA1::sha1Call::new((pre,)).abi_encode(),
|
calldata: SHA1::sha1Call::new((pre,)).abi_encode(),
|
||||||
@@ -184,6 +192,7 @@ impl Contract {
|
|||||||
let name = "Flipper";
|
let name = "Flipper";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Flipper::flipCall::new(()).abi_encode(),
|
calldata: Flipper::flipCall::new(()).abi_encode(),
|
||||||
@@ -195,6 +204,7 @@ impl Contract {
|
|||||||
let name = "ERC20";
|
let name = "ERC20";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: IERC20::totalSupplyCall::new(()).abi_encode(),
|
calldata: IERC20::totalSupplyCall::new(()).abi_encode(),
|
||||||
@@ -206,6 +216,7 @@ impl Contract {
|
|||||||
let name = "Block";
|
let name = "Block";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Block::numberCall::new(()).abi_encode(),
|
calldata: Block::numberCall::new(()).abi_encode(),
|
||||||
@@ -217,6 +228,7 @@ impl Contract {
|
|||||||
let name = "Block";
|
let name = "Block";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Block::timestampCall::new(()).abi_encode(),
|
calldata: Block::timestampCall::new(()).abi_encode(),
|
||||||
@@ -228,6 +240,7 @@ impl Contract {
|
|||||||
let name = "Context";
|
let name = "Context";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Context::address_thisCall::new(()).abi_encode(),
|
calldata: Context::address_thisCall::new(()).abi_encode(),
|
||||||
@@ -239,6 +252,7 @@ impl Contract {
|
|||||||
let name = "Context";
|
let name = "Context";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: Context::callerCall::new(()).abi_encode(),
|
calldata: Context::callerCall::new(()).abi_encode(),
|
||||||
@@ -250,6 +264,7 @@ impl Contract {
|
|||||||
let name = "DivisionArithmetics";
|
let name = "DivisionArithmetics";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: DivisionArithmetics::divCall::new((n, d)).abi_encode(),
|
calldata: DivisionArithmetics::divCall::new((n, d)).abi_encode(),
|
||||||
@@ -261,6 +276,7 @@ impl Contract {
|
|||||||
let name = "DivisionArithmetics";
|
let name = "DivisionArithmetics";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: DivisionArithmetics::sdivCall::new((n, d)).abi_encode(),
|
calldata: DivisionArithmetics::sdivCall::new((n, d)).abi_encode(),
|
||||||
@@ -272,6 +288,7 @@ impl Contract {
|
|||||||
let name = "DivisionArithmetics";
|
let name = "DivisionArithmetics";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: DivisionArithmetics::modCall::new((n, d)).abi_encode(),
|
calldata: DivisionArithmetics::modCall::new((n, d)).abi_encode(),
|
||||||
@@ -283,6 +300,7 @@ impl Contract {
|
|||||||
let name = "DivisionArithmetics";
|
let name = "DivisionArithmetics";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: DivisionArithmetics::smodCall::new((n, d)).abi_encode(),
|
calldata: DivisionArithmetics::smodCall::new((n, d)).abi_encode(),
|
||||||
@@ -294,6 +312,7 @@ impl Contract {
|
|||||||
let name = "MStore8";
|
let name = "MStore8";
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
|
name,
|
||||||
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
evm_runtime: crate::compile_evm_bin_runtime(name, code),
|
||||||
pvm_runtime: crate::compile_blob(name, code),
|
pvm_runtime: crate::compile_blob(name, code),
|
||||||
calldata: MStore8::mStore8Call::new((value,)).abi_encode(),
|
calldata: MStore8::mStore8Call::new((value,)).abi_encode(),
|
||||||
@@ -304,7 +323,7 @@ impl Contract {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use alloy_primitives::U256;
|
use alloy_primitives::U256;
|
||||||
use rayon::iter::{IntoParallelRefIterator, ParallelIterator};
|
use rayon::iter::{IntoParallelIterator, ParallelIterator};
|
||||||
use serde::{de::Deserialize, Serialize};
|
use serde::{de::Deserialize, Serialize};
|
||||||
use std::{collections::BTreeMap, fs::File};
|
use std::{collections::BTreeMap, fs::File};
|
||||||
|
|
||||||
@@ -323,37 +342,40 @@ mod tests {
|
|||||||
})
|
})
|
||||||
.ok();
|
.ok();
|
||||||
|
|
||||||
let cases: [(&str, Box<dyn Fn() -> Contract + Send + Sync>); 7] = [
|
let extract_code_size = |compile: fn() -> Contract| {
|
||||||
("Baseline", Box::new(|| Contract::baseline())),
|
let contract = compile();
|
||||||
("Flipper", Box::new(|| Contract::flipper())),
|
let contract_length = contract.pvm_runtime.len();
|
||||||
("Computation", Box::new(|| Contract::odd_product(0))),
|
let size_change = existing
|
||||||
("Fibonacci", Box::new(|| Contract::fib_iterative(0))),
|
.as_ref()
|
||||||
("ERC20", Box::new(|| Contract::erc20())),
|
.and_then(|map| map.get(contract.name))
|
||||||
("SHA1", Box::new(|| Contract::sha1(Vec::new()))),
|
.filter(|old| **old != 0)
|
||||||
(
|
.map(|old| {
|
||||||
"DivisionArithmetics",
|
let old = *old as f32;
|
||||||
Box::new(|| Contract::division_arithmetics_div(U256::ZERO, U256::ZERO)),
|
let p = (contract_length as f32 - old) / old * 100.0;
|
||||||
),
|
format!("({p}% change from {old} bytes)",)
|
||||||
];
|
})
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
cases
|
println!("{}: {contract_length} bytes {size_change}", contract.name);
|
||||||
.par_iter()
|
|
||||||
.map(|(name, f)| (*name, f().pvm_runtime.len()))
|
(contract.name, contract_length)
|
||||||
.inspect(|(name, bytes)| {
|
};
|
||||||
let change = existing
|
|
||||||
.as_ref()
|
[
|
||||||
.and_then(|map| map.get(*name))
|
Contract::baseline as fn() -> Contract,
|
||||||
.map(|old| {
|
Contract::flipper as fn() -> Contract,
|
||||||
let p = (*bytes - *old) as f32 / *old as f32 * 100.0;
|
(|| Contract::odd_product(0)) as fn() -> Contract,
|
||||||
format!("({p}% change from {old} bytes)")
|
(|| Contract::fib_iterative(0)) as fn() -> Contract,
|
||||||
})
|
Contract::erc20 as fn() -> Contract,
|
||||||
.unwrap_or_default();
|
(|| Contract::sha1(Vec::new())) as fn() -> Contract,
|
||||||
println!("{name}: {bytes} bytes {change}");
|
(|| Contract::division_arithmetics_div(U256::ZERO, U256::ZERO)) as fn() -> Contract,
|
||||||
})
|
]
|
||||||
.collect::<BTreeMap<_, _>>()
|
.into_par_iter()
|
||||||
.serialize(&mut serde_json::Serializer::pretty(
|
.map(extract_code_size)
|
||||||
File::create(path).unwrap(),
|
.collect::<BTreeMap<_, _>>()
|
||||||
))
|
.serialize(&mut serde_json::Serializer::pretty(
|
||||||
.unwrap_or_else(|err| panic!("can not write codesize data to '{path}': {err}"));
|
File::create(path).unwrap(),
|
||||||
|
))
|
||||||
|
.unwrap_or_else(|err| panic!("can not write codesize data to '{path}': {err}"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user