Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deposit contract suggestions #95

Merged
merged 22 commits into from
May 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
bd4792b
kairos-cli: implement client
marijanp May 3, 2024
fa7568a
kairos-cli: implement call to deposit endpoint and integration test
marijanp May 3, 2024
2a4916e
nixos/end-to-end: use kairos-server address when depositing
marijanp May 3, 2024
31b4c71
kairos-cli: use blocking client
marijanp May 6, 2024
9d0ae91
kairos-cli: map to KairosServerError when server returns no-success
marijanp May 6, 2024
e63194d
Merge branch 'main' into implement-deposit-cli-3
marijanp May 6, 2024
0c980ef
kairos-cli: use clap default_value
marijanp May 6, 2024
2a5a04a
Merge branch 'main' into implement-deposit-cli-3
marijanp May 7, 2024
1da5208
kairos-server: output the bind address on failure
marijanp May 7, 2024
606fd1d
kairos-l1-utils: remove
marijanp May 8, 2024
2cd0cb4
demo-contract-tests: refactor fixture and tests
marijanp May 9, 2024
9ac33ec
Merge pull request #91 from cspr-rad/implement-deposit-cli-3
marijanp May 9, 2024
f54df4f
demo-contract-tests: refactor fixture
marijanp May 9, 2024
33ea2fc
demo-contract-tests: add tests to check that admin can't take funds
marijanp May 9, 2024
5f04db2
demo-contract-tests: remove unused dependency
marijanp May 9, 2024
164a60b
don't ignore .env
marijanp May 9, 2024
34a0738
demo-contract: remove u64::from
marijanp May 9, 2024
5a2a899
Merge branch 'main' into deposit-contract-marijan
marijanp May 9, 2024
496d377
fix lockfile
marijanp May 9, 2024
5da25a9
demo-contract: account -> depositor
marijanp May 9, 2024
09da0ad
demo-contract: minor init refactor
marijanp May 9, 2024
b663b89
demo-contract: remove timestamp from deposit event
marijanp May 9, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,3 @@ result
target
.tmp
.nixos-test-history
.env
25 changes: 9 additions & 16 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ members = [
"kairos-server",
"kairos-tx",
"kairos-test-utils",
"kairos-l1-utils",
"demo-contract-tests",
]

Expand Down
4 changes: 1 addition & 3 deletions demo-contract-tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@ license.workspace = true
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dev-dependencies]
base64 = {version = "0.21.2", default-features = false, features = ["alloc"] }
casper-engine-test-support = {version="7.0.0", default-features=false}
casper-execution-engine = {version="7.0.0", default-features=false}
casper-contract = {version="4.0.0", default-features=false}
casper-types = {version="4.0.1", default-features=false}
dotenvy = "0.15.7"
lazy_static = "1.4.0"
rand = "0.8"
88 changes: 50 additions & 38 deletions demo-contract-tests/tests/integration_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,75 @@ mod test_fixture;
#[cfg(test)]
mod tests {
use crate::test_fixture::TestContext;
use casper_types::{account::AccountHash, U512};
use casper_types::U512;

#[test]
fn should_install_deposit_contract() {
let mut fixture: TestContext = TestContext::new();
fixture.install_demo_contract(fixture.account_1);
}

fn setup() -> (TestContext, AccountHash, AccountHash) {
let fixture: TestContext = TestContext::new();
let installer = fixture.account_1;
let user = fixture.account_2;
(fixture, installer, user)
let _fixture = TestContext::new();
}

#[test]
fn deposit_into_purse() {
let deposit_amount: U512 = U512::from(100000000000u64);
let (mut fixture, installer, user) = setup();
fixture.install_demo_contract(installer);
fn test_deposit_succeeds() {
let mut fixture = TestContext::new();

let user_purse_uref = fixture.get_account_purse_uref(user);
let user_balance_before = fixture.builder.get_purse_balance(user_purse_uref);
let user = fixture.create_funded_user();
let user_balance_before = fixture.get_user_balance(user);

let contract_balance_before = fixture.get_contract_purse_balance(installer);
// check that the contract balance is zero before depositing
let deposit_amount = U512::from(100000000000u64);
let contract_balance_before = fixture.get_contract_balance();
assert_eq!(contract_balance_before, U512::zero());

fixture.run_deposit_session(deposit_amount, installer, user);
// user_1 deposits the deposit_amount
fixture.deposit_succeeds(user, deposit_amount);

let contract_balance_after = fixture.get_contract_purse_balance(installer);
// the contract balance should afterward equal to the deposit_amount
let contract_balance_after = fixture.get_contract_balance();
assert_eq!(contract_balance_after, deposit_amount);

let user_balance_after = fixture.builder.get_purse_balance(user_purse_uref);
let user_balance_after = fixture.get_user_balance(user);
assert!(user_balance_after <= user_balance_before - deposit_amount);
}

// see malicious-session
#[test]
fn run_malicious_session() {
let (mut fixture, installer, user) = setup();
fixture.install_demo_contract(installer);
fixture.run_deposit_session(U512::from(100000000000u64), installer, user);
fixture.run_malicious_session(fixture.account_2, U512::from(100000000000u64), installer);
fn test_transfer_from_contract_purse_to_user_fails() {
let mut fixture = TestContext::new();

let user = fixture.create_funded_user();
let amount = U512::from(100000000000u64);
fixture.deposit_succeeds(user, amount);

fixture.transfer_from_contract_purse_to_user_fails(user, amount)
}

#[test]
fn test_transfer_from_contract_purse_to_admin_fails() {
let mut fixture = TestContext::new();

let user = fixture.create_funded_user();
let amount = U512::from(100000000000u64);
fixture.deposit_succeeds(user, amount);

fixture.transfer_from_contract_purse_to_user_fails(fixture.admin, amount)
}

// see malicious-reader
#[test]
fn run_malicious_reader() {
let (mut fixture, installer, user) = setup();
fixture.install_demo_contract(installer);
fixture.run_deposit_session(U512::from(100000000000u64), installer, user);
let deposit_purse_uref = fixture.get_contract_purse_uref(installer);
fixture.run_malicious_reader_session(
fixture.account_2,
U512::from(100000000000u64),
installer,
deposit_purse_uref,
);
fn test_transfer_from_contract_purse_by_uref_to_user_should_fails() {
let mut fixture = TestContext::new();
let user = fixture.create_funded_user();
let amount = U512::from(100000000000u64);
fixture.deposit_succeeds(user, amount);

fixture.transfer_from_contract_purse_by_uref_to_user_fails(user, amount)
}

#[test]
fn test_transfer_from_contract_purse_by_uref_to_admin_should_fails() {
let mut fixture = TestContext::new();
let user = fixture.create_funded_user();
let amount = U512::from(100000000000u64);
fixture.deposit_succeeds(user, amount);

fixture.transfer_from_contract_purse_by_uref_to_user_fails(fixture.admin, amount)
}
}
4 changes: 1 addition & 3 deletions demo-contract-tests/tests/lib.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
pub mod test_fixture {
pub mod utils;
}
pub mod test_fixture;
Loading
Loading