Skip to content

Commit

Permalink
Merge branch 'develop' into feat/erc20-gas-token
Browse files Browse the repository at this point in the history
  • Loading branch information
aleksuss authored Jan 26, 2023
2 parents 2191b58 + 85e2e23 commit 3c7f8be
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 75 deletions.
23 changes: 9 additions & 14 deletions engine-test-doubles/src/io.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use aurora_engine_sdk::io::{StorageIntermediate, IO};
use std::cell::RefCell;
use std::collections::HashMap;
use std::sync::RwLock;

pub struct Value(Vec<u8>);

Expand All @@ -27,37 +27,32 @@ pub struct Storage {

/// In-memory implementation of [IO].
#[derive(Debug, Clone, Copy)]
pub struct StoragePointer<'a>(pub &'a RwLock<Storage>);
pub struct StoragePointer<'a>(pub &'a RefCell<Storage>);

impl<'a> IO for StoragePointer<'a> {
type StorageValue = Value;

fn read_input(&self) -> Self::StorageValue {
Value(self.0.read().unwrap().input.clone())
Value(self.0.borrow().input.clone())
}

fn return_output(&mut self, value: &[u8]) {
let mut storage = self.0.write().unwrap();
let mut storage = self.0.borrow_mut();
storage.output = value.to_vec();
}

fn read_storage(&self, key: &[u8]) -> Option<Self::StorageValue> {
self.0
.read()
.unwrap()
.kv_store
.get(key)
.map(|v| Value(v.clone()))
self.0.borrow().kv_store.get(key).map(|v| Value(v.clone()))
}

fn storage_has_key(&self, key: &[u8]) -> bool {
self.0.read().unwrap().kv_store.contains_key(key)
self.0.borrow().kv_store.contains_key(key)
}

fn write_storage(&mut self, key: &[u8], value: &[u8]) -> Option<Self::StorageValue> {
let key = key.to_vec();
let value = value.to_vec();
let mut storage = self.0.write().unwrap();
let mut storage = self.0.borrow_mut();
storage.kv_store.insert(key, value).map(Value)
}

Expand All @@ -67,12 +62,12 @@ impl<'a> IO for StoragePointer<'a> {
value: Self::StorageValue,
) -> Option<Self::StorageValue> {
let key = key.to_vec();
let mut storage = self.0.write().unwrap();
let mut storage = self.0.borrow_mut();
storage.kv_store.insert(key, value.0).map(Value)
}

fn remove_storage(&mut self, key: &[u8]) -> Option<Self::StorageValue> {
let mut storage = self.0.write().unwrap();
let mut storage = self.0.borrow_mut();
storage.kv_store.remove(key).map(Value)
}
}
4 changes: 2 additions & 2 deletions engine-tests/src/tests/standalone/sanity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use aurora_engine_test_doubles::io::{Storage, StoragePointer};
use aurora_engine_test_doubles::promise::PromiseTracker;
use aurora_engine_types::types::{Address, EthGas, Wei};
use aurora_engine_types::{account_id::AccountId, H160, H256, U256};
use std::sync::RwLock;
use std::cell::RefCell;

#[test]
fn test_deploy_code() {
Expand All @@ -22,7 +22,7 @@ fn test_deploy_code() {
default_gas_token: Default::default(),
};
let origin = Address::new(H160([0u8; 20]));
let storage = RwLock::new(Storage::default());
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);
let env = aurora_engine_sdk::env::Fixed {
signer_account_id: owner_id.clone(),
Expand Down
2 changes: 1 addition & 1 deletion engine/src/connector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -713,7 +713,7 @@ pub fn set_contract_data<I: IO>(
Ok(contract_data)
}

/// Return metdata
/// Return metadata
pub fn get_metadata<I: IO>(io: &I) -> Option<FungibleTokenMetadata> {
io.read_storage(&construct_contract_key(
&EthConnectorStorageId::FungibleTokenMetadata,
Expand Down
71 changes: 25 additions & 46 deletions engine/src/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1822,15 +1822,14 @@ mod tests {
use aurora_engine_test_doubles::io::{Storage, StoragePointer};
use aurora_engine_test_doubles::promise::PromiseTracker;
use aurora_engine_types::types::RawU256;
use std::sync::RwLock;
use std::cell::RefCell;

#[test]
fn test_view_call_to_empty_contract_without_input_returns_empty_data() {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
let engine =
Expand All @@ -1856,8 +1855,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);
let mut engine =
Engine::new_with_state(EngineState::default(), origin, current_account_id, io, &env);
Expand All @@ -1882,8 +1880,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
let mut engine =
Expand Down Expand Up @@ -1914,8 +1911,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);
let mut engine =
Engine::new_with_state(EngineState::default(), origin, current_account_id, io, &env);
Expand Down Expand Up @@ -1944,8 +1940,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
let mut engine =
Expand Down Expand Up @@ -1973,8 +1968,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
let mut engine =
Expand All @@ -2000,8 +1994,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
let mut engine =
Expand All @@ -2020,8 +2013,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
set_balance(&mut io, &origin, &Wei::new_u64(22000));
let mut engine = Engine::new_with_state(
Expand All @@ -2046,9 +2038,9 @@ mod tests {
.unwrap();
engine.receive_erc20_tokens(&nep141_token, &args, &current_account_id, &mut handler);

let storage_read = storage.read().unwrap();
let actual_output = std::str::from_utf8(storage_read.output.as_slice()).unwrap();
let expected_output = "\"0\"";
let storage = storage.borrow();
let actual_output = storage.output.as_slice();
let expected_output = b"\"0\"";

assert_eq!(expected_output, actual_output);
}
Expand All @@ -2059,8 +2051,7 @@ mod tests {
let origin = aurora_engine_sdk::types::near_account_to_evm_address(
env.predecessor_account_id().as_bytes(),
);
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
state::set_state(&mut io, EngineState::default()).unwrap();
Expand All @@ -2082,8 +2073,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
add_balance(&mut io, &origin, Wei::new_u64(22000)).unwrap();
let mut engine =
Expand Down Expand Up @@ -2177,8 +2167,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
let engine =
Engine::new_with_state(EngineState::default(), origin, current_account_id, io, &env);
Expand All @@ -2197,8 +2186,7 @@ mod tests {
let origin = Address::zero();
let current_account_id = AccountId::default();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
let expected_state = EngineState::default();
state::set_state(&mut io, expected_state.clone()).unwrap();
Expand All @@ -2212,8 +2200,7 @@ mod tests {
fn test_refund_transfer_eth_back_from_precompile_address() {
let recipient_address = make_address(1, 1);
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
let expected_state = EngineState::default();
let refund_amount = Wei::new_u64(1000);
Expand All @@ -2236,8 +2223,7 @@ mod tests {
fn test_refund_remint_burned_erc20_tokens() {
let origin = Address::zero();
let env = Fixed::default();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
let expected_state = EngineState::default();
state::set_state(&mut io, expected_state.clone()).unwrap();
Expand All @@ -2258,8 +2244,7 @@ mod tests {
#[test]
fn test_refund_free_effective_gas_does_nothing() {
let origin = Address::zero();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
let expected_state = EngineState::default();
state::set_state(&mut io, expected_state).unwrap();
Expand All @@ -2276,8 +2261,7 @@ mod tests {
#[test]
fn test_refund_gas_pays_expected_amount() {
let origin = Address::zero();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
let expected_state = EngineState::default();
state::set_state(&mut io, expected_state).unwrap();
Expand All @@ -2300,8 +2284,7 @@ mod tests {
#[test]
fn test_check_nonce_with_increment_succeeds() {
let origin = Address::zero();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);

increment_nonce(&mut io, &origin);
Expand All @@ -2311,16 +2294,13 @@ mod tests {
#[test]
fn test_check_nonce_without_increment_fails() {
let origin = Address::zero();
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);

increment_nonce(&mut io, &origin);
let actual_error_kind = check_nonce(&io, &origin, &U256::from(0u64)).unwrap_err();
let actual_error_kind = std::str::from_utf8(actual_error_kind.as_bytes()).unwrap();
let expected_error_kind = std::str::from_utf8(errors::ERR_INCORRECT_NONCE).unwrap();

assert_eq!(expected_error_kind, actual_error_kind);
assert_eq!(actual_error_kind.as_bytes(), errors::ERR_INCORRECT_NONCE);
}

#[test]
Expand All @@ -2338,9 +2318,8 @@ mod tests {

#[test]
fn test_filtering_promises_from_logs_with_none_keeps_all() {
let storage = Storage::default();
let storage = RwLock::new(storage);
let mut io = StoragePointer(&storage);
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);
let current_account_id = AccountId::default();
let mut handler = Noop;
let logs = vec![Log {
Expand Down
1 change: 0 additions & 1 deletion engine/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,6 @@ mod contract {
}

#[no_mangle]

pub extern "C" fn withdraw() {
let io = Runtime;
io.assert_one_yocto().sdk_unwrap();
Expand Down
4 changes: 2 additions & 2 deletions engine/src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@ mod tests {
use aurora_engine_test_doubles::io::{Storage, StoragePointer};
use aurora_engine_types::account_id::AccountId;
use aurora_engine_types::types::Address;
use std::sync::RwLock;
use std::cell::RefCell;

let storage = RwLock::new(Storage::default());
let storage = RefCell::new(Storage::default());
let storage = StoragePointer(&storage);
let left_prefix = KeyPrefix::Nep141Erc20Map;
let right_prefix = KeyPrefix::Erc20Nep141Map;
Expand Down
8 changes: 4 additions & 4 deletions engine/src/pausables.rs
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,8 @@ impl<I: IO> PausedPrecompilesManager for EnginePrecompilesPauser<I> {
mod tests {
use super::*;
use aurora_engine_test_doubles::io::{Storage, StoragePointer};
use std::cell::RefCell;
use std::iter::once;
use std::sync::RwLock;
use test_case::test_case;

#[test_case(PrecompileFlags::EXIT_TO_ETHEREUM, exit_to_ethereum::ADDRESS)]
Expand All @@ -194,7 +194,7 @@ mod tests {

#[test]
fn test_pausing_precompile_marks_it_as_paused() {
let storage = RwLock::new(Storage::default());
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);
let mut pauser = EnginePrecompilesPauser::from_io(io);
let flags = PrecompileFlags::EXIT_TO_NEAR;
Expand All @@ -206,7 +206,7 @@ mod tests {

#[test]
fn test_resuming_precompile_removes_its_mark_as_paused() {
let storage = RwLock::new(Storage::default());
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);
let mut pauser = EnginePrecompilesPauser::from_io(io);
let flags = PrecompileFlags::EXIT_TO_NEAR;
Expand Down Expand Up @@ -237,7 +237,7 @@ mod tests {
#[should_panic]
fn test_no_precompile_is_paused_if_storage_contains_too_few_bytes() {
let key = EnginePrecompilesPauser::<StoragePointer>::storage_key();
let storage = RwLock::new(Storage::default());
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);
io.write_storage(key.as_slice(), &[7u8]);
let pauser = EnginePrecompilesPauser::from_io(io);
Expand Down
8 changes: 3 additions & 5 deletions engine/src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,12 +142,11 @@ pub mod legacy {
mod tests {
use super::*;
use aurora_engine_test_doubles::io::{Storage, StoragePointer};
use std::sync::RwLock;
use std::cell::RefCell;

#[test]
fn test_missing_engine_state_is_not_found() {
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let io = StoragePointer(&storage);

let actual_error = get_state(&io).unwrap_err();
Expand All @@ -159,8 +158,7 @@ mod tests {

#[test]
fn test_empty_engine_state_is_corrupted() {
let storage = Storage::default();
let storage = RwLock::new(storage);
let storage = RefCell::new(Storage::default());
let mut io = StoragePointer(&storage);

io.write_storage(&bytes_to_key(KeyPrefix::Config, STATE_KEY), &[]);
Expand Down

0 comments on commit 3c7f8be

Please sign in to comment.