mirror of
https://github.com/logos-blockchain/logos-execution-zone.git
synced 2026-07-03 20:40:22 +00:00
* refactor(lee): split large modules into directories and extract tests Split state.rs, program.rs, circuit.rs, validated_state_diff.rs, merkle_tree, and core/program.rs into module directories with separate test files. State tests are further split into themed files (genesis, authenticated_transfer, circuit, claiming, etc.). Extract authenticate_public_transaction_signers helper in validated_state_diff to remove duplicated authentication logic. * chore: rebuild artifacts
150 lines
5.5 KiB
Rust
150 lines
5.5 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn transition_from_authenticated_transfer_program_invocation_default_account_destination() {
|
|
let key = PrivateKey::try_new([1; 32]).unwrap();
|
|
let account_id = AccountId::from(&PublicKey::new_from_private_key(&key));
|
|
let initial_data = [(
|
|
account_id,
|
|
Account {
|
|
program_owner: crate::test_methods::simple_balance_transfer().id(),
|
|
balance: 100,
|
|
..Account::default()
|
|
},
|
|
)];
|
|
let mut state = V03State::new()
|
|
.with_public_accounts(initial_data)
|
|
.with_test_programs();
|
|
let from = account_id;
|
|
let to_key = PrivateKey::try_new([2; 32]).unwrap();
|
|
let to = AccountId::from(&PublicKey::new_from_private_key(&to_key));
|
|
assert_eq!(state.get_account_by_id(to), Account::default());
|
|
let balance_to_move = 5;
|
|
|
|
let tx = transfer_transaction(from, &key, 0, to, &to_key, 0, balance_to_move);
|
|
state.transition_from_public_transaction(&tx, 1, 0).unwrap();
|
|
|
|
assert_eq!(state.get_account_by_id(from).balance, 95);
|
|
assert_eq!(state.get_account_by_id(to).balance, 5);
|
|
assert_eq!(state.get_account_by_id(from).nonce, Nonce(1));
|
|
assert_eq!(state.get_account_by_id(to).nonce, Nonce(1));
|
|
}
|
|
|
|
#[test]
|
|
fn transition_from_authenticated_transfer_program_invocation_insuficient_balance() {
|
|
let key = PrivateKey::try_new([1; 32]).unwrap();
|
|
let account_id = AccountId::from(&PublicKey::new_from_private_key(&key));
|
|
let mut state = V03State::new()
|
|
.with_public_account_balances([(account_id, 100)])
|
|
.with_test_programs();
|
|
let from = account_id;
|
|
let from_key = key;
|
|
let to_key = PrivateKey::try_new([2; 32]).unwrap();
|
|
let to = AccountId::from(&PublicKey::new_from_private_key(&to_key));
|
|
let balance_to_move = 101;
|
|
assert!(state.get_account_by_id(from).balance < balance_to_move);
|
|
|
|
let tx = transfer_transaction(from, &from_key, 0, to, &to_key, 0, balance_to_move);
|
|
let result = state.transition_from_public_transaction(&tx, 1, 0);
|
|
|
|
assert!(matches!(result, Err(LeeError::ProgramExecutionFailed(_))));
|
|
assert_eq!(state.get_account_by_id(from).balance, 100);
|
|
assert_eq!(state.get_account_by_id(to).balance, 0);
|
|
assert_eq!(state.get_account_by_id(from).nonce, Nonce(0));
|
|
assert_eq!(state.get_account_by_id(to).nonce, Nonce(0));
|
|
}
|
|
|
|
#[test]
|
|
fn transition_from_authenticated_transfer_program_invocation_non_default_account_destination() {
|
|
let key1 = PrivateKey::try_new([1; 32]).unwrap();
|
|
let key2 = PrivateKey::try_new([2; 32]).unwrap();
|
|
let account_id1 = AccountId::from(&PublicKey::new_from_private_key(&key1));
|
|
let account_id2 = AccountId::from(&PublicKey::new_from_private_key(&key2));
|
|
let initial_data = [
|
|
(
|
|
account_id1,
|
|
Account {
|
|
program_owner: crate::test_methods::simple_balance_transfer().id(),
|
|
balance: 100,
|
|
..Account::default()
|
|
},
|
|
),
|
|
(
|
|
account_id2,
|
|
Account {
|
|
program_owner: crate::test_methods::simple_balance_transfer().id(),
|
|
balance: 200,
|
|
..Account::default()
|
|
},
|
|
),
|
|
];
|
|
let mut state = V03State::new()
|
|
.with_public_accounts(initial_data)
|
|
.with_test_programs();
|
|
let from = account_id2;
|
|
let from_key = key2;
|
|
let to = account_id1;
|
|
let to_key = key1;
|
|
assert_ne!(state.get_account_by_id(to), Account::default());
|
|
let balance_to_move = 8;
|
|
|
|
let tx = transfer_transaction(from, &from_key, 0, to, &to_key, 0, balance_to_move);
|
|
state.transition_from_public_transaction(&tx, 1, 0).unwrap();
|
|
|
|
assert_eq!(state.get_account_by_id(from).balance, 192);
|
|
assert_eq!(state.get_account_by_id(to).balance, 108);
|
|
assert_eq!(state.get_account_by_id(from).nonce, Nonce(1));
|
|
assert_eq!(state.get_account_by_id(to).nonce, Nonce(1));
|
|
}
|
|
|
|
#[test]
|
|
fn transition_from_sequence_of_authenticated_transfer_program_invocations() {
|
|
let key1 = PrivateKey::try_new([8; 32]).unwrap();
|
|
let account_id1 = AccountId::from(&PublicKey::new_from_private_key(&key1));
|
|
let key2 = PrivateKey::try_new([2; 32]).unwrap();
|
|
let account_id2 = AccountId::from(&PublicKey::new_from_private_key(&key2));
|
|
let initial_data = [(
|
|
account_id1,
|
|
Account {
|
|
program_owner: crate::test_methods::simple_balance_transfer().id(),
|
|
balance: 100,
|
|
..Account::default()
|
|
},
|
|
)];
|
|
let mut state = V03State::new()
|
|
.with_public_accounts(initial_data)
|
|
.with_test_programs();
|
|
let key3 = PrivateKey::try_new([3; 32]).unwrap();
|
|
let account_id3 = AccountId::from(&PublicKey::new_from_private_key(&key3));
|
|
let balance_to_move = 5;
|
|
|
|
let tx = transfer_transaction(
|
|
account_id1,
|
|
&key1,
|
|
0,
|
|
account_id2,
|
|
&key2,
|
|
0,
|
|
balance_to_move,
|
|
);
|
|
state.transition_from_public_transaction(&tx, 1, 0).unwrap();
|
|
let balance_to_move = 3;
|
|
let tx = transfer_transaction(
|
|
account_id2,
|
|
&key2,
|
|
1,
|
|
account_id3,
|
|
&key3,
|
|
0,
|
|
balance_to_move,
|
|
);
|
|
state.transition_from_public_transaction(&tx, 1, 0).unwrap();
|
|
|
|
assert_eq!(state.get_account_by_id(account_id1).balance, 95);
|
|
assert_eq!(state.get_account_by_id(account_id2).balance, 2);
|
|
assert_eq!(state.get_account_by_id(account_id3).balance, 3);
|
|
assert_eq!(state.get_account_by_id(account_id1).nonce, Nonce(1));
|
|
assert_eq!(state.get_account_by_id(account_id2).nonce, Nonce(2));
|
|
assert_eq!(state.get_account_by_id(account_id3).nonce, Nonce(1));
|
|
}
|