Commit Graph

261 Commits (818147a6298a1376d8df91b8cc684a1a3fc4ee30)

Author SHA1 Message Date
Franck Royer 6e6dc320b4
Alice event loop now handles the creation of new swaps 3 years ago
Franck Royer 15eb9a2fe4
Remove punish test
The punish test needs re-work due to the fact that Alice runs continuously

Currently focusing on the CLI (Bob), so we can re-introduce this test
once we want to ensure that nectar (Alice) punishes.
3 years ago
Franck Royer 3bc8b58b6a
Remove Bob restart tests after communication
The test do not work without acks as we stop the event loop as soon
as a message is considered as "sent" when actually the event loop
and swarm may not have yet sent the message.

The ack allow to avoid this issue as the message was considered "sent"
only once the other party sent a response. However, the ack brings
other issue so a review needs to be done to select the appropriate
solution.
3 years ago
Franck Royer fd9f633a77
Remove Alice restarts tests
Current focus is on CLI UX. Fair amount of change needs to happen to
cater for Alice (nectar) restart scenarios.
3 years ago
Daniel Karzel 86290649e7 work in review comments 3 years ago
Daniel Karzel c930ad84a4 Add --force flag for cancel and refund 3 years ago
Daniel Karzel 02f8eb7f18 Add test for cancel/refund before timelock expired 3 years ago
Daniel Karzel 2d5d70d856 Timeout for Alice waiting for ack for sending transfer proof
If dialing Bob fails Alice waits for the acknowledgement of the transfer proof indefinitely.
The timout prevents her execution from hanging.
Added a ToDo to re-visit the ack receivers. They don't add value at the moment and should be removed.
3 years ago
Daniel Karzel c9adbde5d5 Add test for Bob's manual cancel and refund 3 years ago
Franck Royer c316ea5244
Upgrade toolchain
Needed to use libp2p-async-await
3 years ago
Daniel Karzel 89b3775e05 Rename config to execution_params 3 years ago
Daniel Karzel 802dc61e7e Configuration for RPC urls and Bitcoin wallet name 3 years ago
Franck Royer 108cc1e6cc
Use trait instead of passing struct 3 years ago
Franck Royer b8a9356d1b
Change expiries depending on the test goal 3 years ago
Franck Royer 49b8d19e41
test: Log state on failure 3 years ago
rishflab 1597f5336b
Restart event loop in tests
Alice was attempting to create a new event loop using the same listen addr as the old one which was still running. This commit aborts the event loop before creating a new one.
3 years ago
rishflab 77fc5743a2
Upgrade tokio to 1.0
Upgrade bitcoin harness dependency to latest commit

Upgrade backoff to fix failing tests. The previous version of backoff had a broken version of the retry function. Upgraded to a newer comit which fixes this problem.

Upgrade hyper to 0.14 as the 0.13 was bringing in tokio 0.2.24

Upgraded bitcoin harness to version that uses tokio 1.0 and reqwest 0.11

Upgrade reqwest to 0.11. Reqwest 0.11 uses tokio 1.0

Upgrade libp2p to 0.34 in preparation for tokio 1.0 upgrade
3 years ago
Franck Royer f2a25ee49b
Move definitions out of lib.rs 4 years ago
Daniel Karzel 33a9057b1f Move run_until is_target_state comparison functions into testutils 4 years ago
Daniel Karzel 3593f5323a Bob saves lock proof after received so he can resume swap 4 years ago
Daniel Karzel 433704e48c Top to bottom `pub mod` then `mod` then `pub use` then `use` (incl. `use crate` and `use self`) 4 years ago
Daniel Karzel 6a75c840b5 Fix Alice redeem scenario
- Properly check the timelocks before trying to redeem
- Distinguish different failure scenarios and reactions to it.
    - if we fail to construct the redeem transaction: wait for cancel.
    - if we fail to publish the redeem transaction: wait for cancel but let the user know that restarting the application will result in retrying to publish the tx.
    - if we succeed to publish the tx but then fail when waiting for finality, print error to the user (secreat already leaked, the user has to check manually if the tx was included)
4 years ago
Daniel Karzel 8a7d746e96 Wait for Bob's refund finality
For Alice we ensure to wait for redeem/punish finality, so it should be the same for Bob.
4 years ago
Franck Royer 94045b9a69
Use builder in tests 4 years ago
Franck Royer c11042ff0d
Use `builder` terminology instead of `factory`
This is not really a factory as a factory design pattern is about
producing several instances.

In the current usage, we are only interested in one swap instance. Once
the swap instance is created, the factory becomes useless. Hence, it is
more of a builder pattern.
4 years ago
Franck Royer 9148af2dbe
`bob::SwapFactory` should be consumed once a swap is returned 4 years ago
Franck Royer b21dc03ed0
`alice::SwapFactory` should be consumed once a swap is returned 4 years ago
Franck Royer 9e3ef7ea24
Remove `StartingBalances` from release code 4 years ago
Franck Royer 181999e04f
Remove unnecessary `alice` qualifiers in `alice::SwapFactor` 4 years ago
Franck Royer f0e6e45d56
Remove unecessary `bob` qualifier 4 years ago
Franck Royer e26629b593
Remove unecessary fields from `bob::SwapFactory` 4 years ago
Franck Royer 96b1b18037
Keep terminology consistent
Also avoid redundant qualifiers.
4 years ago
Daniel Karzel 37f619dbfc Move StartingBalances into protocol module 4 years ago
Daniel Karzel acfd43ee79 Rename Test to TestContext and argument to ctx 4 years ago
Daniel Karzel 82974412b2 Remove roles from SwapFactory name as implied by module and cleanup 4 years ago
Daniel Karzel 75f89f3b25 Use Bob swap factory in production 4 years ago
Daniel Karzel 3398ef8236 Use Alice swap factory in production 4 years ago
Daniel Karzel 67e925fe1f Refactor Bob's peer-id and identity to be handled on the outside
Doing this in the behaviour is a weird indirection that is not needed.
4 years ago
Daniel Karzel 0c19af9090 Refactor Alice's peer-id and identity to be handled on the outside
Doing this in the behaviour is a weird indirection that is not needed.
4 years ago
Daniel Karzel 8bf467b550 Make the factory code usable in production
- Introduce Test abstraction instead of tow harnesses, move test specific data into Test
- Change the abstraction from actors to swap, because we are creating swaps, not actors
- rename actor::swap  to run, because we are running a swap
4 years ago
Franck Royer 9a823dca4c
Do not introduced State6 4 years ago
Daniel Karzel 8615aaed6e Make lock-tx id available in redeem/punish state to be able to assert exact fees 4 years ago
Daniel Karzel 317b251302 Re-arrange order of structs/functions in testutils
move important things to the top and harmonize structure for alice and bob.
4 years ago
Daniel Karzel 7832ee94f3 Remove unused code and only expose necessary functionality 4 years ago
Daniel Karzel 8ef8240771 Refactor refund test 4 years ago
Daniel Karzel 55024572ae Refactor punish test and punish assertions 4 years ago
Daniel Karzel 73a2841ec5 Refactor happy path bob restart tests 4 years ago
Daniel Karzel 8a2eb07928 Harmonize names and structure
Simple renames and structure changes, no logical changes.
4 years ago
Daniel Karzel bede1c13dd Refactor Bob's side (happy path + alice restart)
Refactor Bob's test setup in the same way as Alice's.
Introduce BobHarness that allows creating and restarting as well as asserting redeemed for Bob.
4 years ago
Daniel Karzel 59f9a1c286 Fix usage of StartingBalance in Alice and Bob 4 years ago
Daniel Karzel 87edec0d50 Rename Alice's factory to harness and include redeem assertions
This makes the redeem assertion reusable for all tests with a redeem scenario.
Since the factory was not a clean factory before and is now doing even more it was renamed to harness.
4 years ago
Daniel Karzel 152c8d7eba Refactor Alice restart test by introducing factory for creating Alices
The factory keeps all static state of Alice to be able to simulate a restart.
4 years ago
rishflab 537d05e01e Add reusable test function
We introduce a reusable test function to make it easier to add new tests and make our existing tests more readable.
4 years ago
rishflab f5cfe014be Fix imports 4 years ago
Daniel Karzel 664958939d Create network::Seed from swap::Seed instead of abstracting over byte array 4 years ago
Daniel Karzel f18d01dfaf Deterministic peer id from seed for bob 4 years ago
Daniel Karzel 0a21040e08 Deterministic peer id from seed for alice
This includes the introduction of the --data-dir parameter instead of the --database.
Both the seed file and the database are stored in the data-dir, the database in sub-folder `database`.
4 years ago
rishflab dcea54dbf1 Move protocol parent states into appropriate module 4 years ago
rishflab c900d12593 Merge xmr_btc crate
Created network, storage and protocol modules. Organised
files into the modules where the belong.

xmr_btc crate moved into isolated modulein swap crate.

Remove the xmr_btc module and integrate into swap crate.

Consolidate message related code

Reorganise imports

Remove unused parent Message enum

Remove unused parent State enum

Remove unused dependencies from Cargo.toml
4 years ago
Daniel Karzel 487b880371 Cleanup unused config param that was accidentally introduced 4 years ago
Daniel Karzel e031681369 Add minimum monero confirmations to config use it for Bob 4 years ago
Daniel Karzel 4d9559fc2e Monero network settings and testnet 4 years ago
Franck Royer e1e8533862
Embed state mod in database mod
The `Swap` struct is now database specific, no need to have a 20 lines
 module.
4 years ago
Franck Royer 59708c57e6
Move Alice and Bob db states in separate modules 4 years ago
Franck Royer b410de01df
Move state.rs under database module
The types in state are only used for the database
4 years ago
Franck Royer 8c7964bfee
Rename storage.rs to database.rs to reduce terminology variants 4 years ago
Franck Royer 4150e75488
Replace `Try_From` state conversion with `From` for Bob 4 years ago
Franck Royer e541f7b83d
Replace `TryFrom` with `From` for Alice states 4 years ago
Franck Royer a31db63e54
Improve state names and display 4 years ago
Franck Royer f0736d0906
Remove Refund timelock and T0/T1/T2
There are no refund timelock, only a cancellation timelock and punish
timelock.

Refund can be done as soon as the cancellation transaction is published.
4 years ago
Franck Royer 405e377f79
Rename `EncSign` to `EncSig`
`EncSig` means "encrypted signature", the item,
not be confused with "signing", the action
4 years ago
Franck Royer 297b15e3ce
Remove async block when it is not needed 4 years ago
Franck Royer e079b84500
Ensure we wait for other party to complete
Before we check the balances.
4 years ago
Daniel Karzel 8296490764
Merge pull request #111 from comit-network/trace-xmr-btc
Fix tracing subscribe filter for xmr-btc`
4 years ago
Daniel Karzel 5f8b7f2624 Fix tracing subscribe filter for xmr-btc` 4 years ago
Franck Royer 49b84d84b9
Add address at the start
Do not carry peer id around as we currently only expect one peer.
4 years ago
Franck Royer 1e4b115556
Separate Bob restart tests
To stabilize CI
4 years ago
Franck Royer e366d3a73b
Join all futures to avoid hanging tests 4 years ago
Franck Royer 1a4bd0e2b4
Bob refunds swap after restart that requires communication
As Bob is dialing Alice, we now ensure that we are connected to Alice
at each step that needs communication.
If we are not connected, we proceed with dialing.

In an attempt to improve libp2p usage, we also add known address of
Alice first and only use peer_id to dial.
This ensures that we use the expected peer id.
4 years ago
Franck Royer d9ea7ab605
Only carry the tx_lock_id instead of the full state 4 years ago
Franck Royer edfab58246
Scope alice db
To better match the restart scenario
4 years ago
Franck Royer dc96b3d1e9
Stop running first event loop after Alice restarts 4 years ago
Franck Royer 638143a10d
Replace hard coded port by dynamic available one
Fixes #84.
4 years ago
Franck Royer 2212758d17
Rename refund test as it is alice specific 4 years ago
bors[bot] 3db71997d3
Merge #99
99: Cleanup resume_from_database functions only used in tests r=da-kami a=da-kami

Follow up of https://github.com/comit-network/xmr-btc-swap/pull/88

Co-authored-by: Daniel Karzel <daniel@comit.network>
4 years ago
Daniel Karzel 773eebc723 Cleanup resume_from_database functions only used in tests 4 years ago
Daniel Karzel 43d05935e7 Remove tor module 4 years ago
rishflab 9d266fc648 Add balance assertions to restart tests 4 years ago
Franck Royer 5ba830f3bf
Replace swap `recover` terminology with `resume` 4 years ago
Daniel Karzel b83ab71669
Split up tests into separate files to overcome CI failure 4 years ago
Daniel Karzel 7cae6a9e4d
Add Bob restart test 4 years ago
Daniel Karzel 4ec2da29a0
Modularize Bob's test setup (separate init for state, event_loop) 4 years ago
Daniel Karzel 9a930af33f
Remove duplicated restart+refund test, move tests into separate files 4 years ago
Daniel Karzel 91d4d5da25
Cleanup swap execution to not return EventLoopHandle, refactor both_refund test 4 years ago
Daniel Karzel bf39c34ada
Alice restart and refund test if restarted before encsig learner 4 years ago
Daniel Karzel 8c929564ef
Refactor container initialization 4 years ago
rishflab 143d8bc07d
Move message0 response handler out of NB 4 years ago
Daniel Karzel 4143394767
Add recovery function for Alice 4 years ago
rishflab 4b00141c29
Fix happy path test 4 years ago
Franck Royer 7092af457a
Introduced DB for Alice & Bob 4 years ago
Franck Royer 4ce8695dfc
Align with origin/database 4 years ago
Franck Royer 1a5b9f9fa9
Update tests after rebase 4 years ago
Franck Royer caf903acda
wip: Add test for when bob restarts 4 years ago
Franck Royer 7e0a1ffe84
Remove generator for bob 4 years ago
Franck Royer c6af5eb9ac
Introduce test where alice restarts before all communications are done 4 years ago
Franck Royer 3580b7ed2c
Add test where Alice restart after encsign is learned 4 years ago
Franck Royer a22efaa7bc
Remove unneeded peer id argument 4 years ago
Franck Royer 9323f22009
Reorder calls 4 years ago
Franck Royer a24d1a49b9
Remove unneeded `as_ref_calls` 4 years ago
Franck Royer 1c7cc7ee46
Scope futures' instanciation 4 years ago
Franck Royer 6226e5789f
Introduce test where alice restart mid-swap 4 years ago
Franck Royer 71a0832ef4
Add zero const to monero::Amount 4 years ago
Franck Royer 64b021daf4
Save Alice states in db 4 years ago
Franck Royer 11cea9ba69
Remove passing alice peer id
The usage of the peer id is incorrect as we do not even check it when
dialing. For now, we can ignore it.
We can then re-introduce it and use it properly at a later stage.
4 years ago
rishflab 082f4eb005 Use unused port in refund test 4 years ago
rishflab 7af4b6980a Test Alice refunds after Bob refund
Reworked Alice XmrLocked state transition handler to handle the
scenario when Alice received the encsig but Bob refunds.
Previously Alice was trying to redeem after receiving the encsig
without checking if t1 had elapsed.
4 years ago
rishflab 773390886b Test that Bob refunds if Alice fails to act 4 years ago
rishflab f806ad7231 Assert balances after punish 4 years ago
bors[bot] 9fecf7008e
Merge #61
61: Prepare CLI for mainnet swap r=da-kami a=da-kami



Co-authored-by: Daniel Karzel <daniel@comit.network>
4 years ago
Daniel Karzel 03b8e5f52e Upgrade CLI for mainnet test 4 years ago
Daniel Karzel aad7a22f81 Utility function for initializing tracing for tests 4 years ago
Franck Royer c0478d7191
Move expiries to config
So they can be different for mainnet and regtest
4 years ago
rishflab 9ba89194b0 Rename swarm driver to event loop 4 years ago
rishflab f5d3d54b13 Prevent premature Bob t1 timeout
Bob was hitting the t1 timeout and entering cancel
instead of redeem. This was resolved by increasing
the timeouts to 50.
4 years ago
rishflab 27d1334726 Init Alice behaviour with state0
Previously state0 had to be set after creating Alice's behaviour.
With the event loop we no longer has access to the swarm so
set_state0() has to be called indirectly through a channel. This
means it is difficult to guarantee state0 is being set due to the
asynchronous nature of channels. This was solved by initialising
Alice with state0.
4 years ago
rishflab 3d8866f1a0 Convert event loop to use fused futures select
Co-authored-by: Daniel Karzel <daniel@comit.network>
4 years ago
rishflab 58da1df9dc Create SwarmDriverHandle to resolve ownership issues 4 years ago
rishflab 6f7408ecce Drive swarm in seperate async task
Previously the libp2p swarm had to be manually polled within the
protocol execution code to execute actions such as sending a
message. The swarm is now wrapped in SwarmDriver which polls the
swarm in a seperate task
4 years ago
rishflab bd8e6e36e0 Fix monero blocktime config 4 years ago
Daniel Karzel 1a2857af29 Properly init tracing per test and reverse the filter to be exclusive
Tracing should be initialized by test and the `_guard` kept alive within the test.
Re-using this code in different tests does not really have any additional value.

Instead of specifying what messages we want to include, I went for a filter that excludes noise.
That way we get more useful logging.
4 years ago
rishflab 883a913f30 Remove nonsensical monero * monero multiplication 4 years ago
rishflab 627b1a9f00 Remove unnecessary execution restart 4 years ago
rishflab 8592ef5f79 Address PR feedback
Add context to logging statements. Use amount type for monero in tests. Remove stale
code and comments.
4 years ago
rishflab b4ac69fa9c Reduce stack size to prevent CI resource issues 4 years ago
rishflab e4eed7b1a5 Change multiaddr for test runs 4 years ago
rishflab c91e9652aa Add alice punish test
Use reusable test init functions for happy path test

Extract tracing setup to reusable function

Move test initialization to seperate functions

Increase stack size in CI

Fix monero max finality time

Force Bob swarm polling to send message 2

Run Bob state to xmr_locked in punish test to force the sending of
message2. Previously Bob state was run until btc_locked. Although
this was the right thing to do, message2 was not being sent as the
swarm was not polled in btc_locked. Alice punish test passes.

Add info logging to executor
4 years ago
Franck Royer 765482b0aa
Implement `wait_for_transaction_finality` 4 years ago
rishflab 1c401aad31 Fix clippy warnings and formatting 4 years ago
rishflab 47c3ddc6f7 Fix happy path test
Poll bob swarm to send encsig after calling send message3. Comment
out unimplmented wait for transaction finality trait. Dial alice.
4 years ago
Franck Royer 9e13034e54 Extract execution details from driving loop 4 years ago
rishflab 24631d464d Add test for recursive executor 4 years ago
Franck Royer c4cd64d134 Implemented Alice transition from `Started` to `Negotiated` 4 years ago
rishflab ff7daf16f3 WIP: Test simplified swap execution 4 years ago
Lucas Soriano del Pino 483c819e17 Correctly re-export types from bitcoin and monero modules 4 years ago
Lucas Soriano del Pino f5ff50157e Some more fixes and comments after testing Alice's recovery 4 years ago
Lucas Soriano del Pino 28225f8643 Implement swap recover function for Alice
This introduces a lot of duplication between the binary and the
library, but it's okay because this module should only be a temporary
measure until we allow recovery to be handled by the original state
machine.

Also, fix a bug in `xmr_btc::alice::action_generator` caused by the
incorrect assumption that Alice's ability to punish Bob could be
determined before the cancel transaction hits the blockchain.
4 years ago
Lucas Soriano del Pino 33a111d879 Move Swap state out of storage 4 years ago
Lucas Soriano del Pino ac2cfd7f65 Print swap history on --history flag 4 years ago
Lucas Soriano del Pino 823add218e Remove temporary test tracing guards 4 years ago
Lucas Soriano del Pino a26890001b Fix swap e2e test 4 years ago