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

Crosschain Swaps contracts and tests #3698

Merged
merged 141 commits into from
Jan 13, 2023
Merged
Show file tree
Hide file tree
Changes from 114 commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
06a4db1
initial tests
nicolaslara Nov 22, 2022
7132388
added tests of contracts up to transfer message
nicolaslara Nov 23, 2022
02cbae6
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Nov 23, 2022
6d9d71f
remove wasmd override
nicolaslara Nov 23, 2022
b7fc5c2
working crosschain swap test via IBC
nicolaslara Nov 23, 2022
5eb319c
added acks to tests and spec for handling packet acks.
nicolaslara Nov 24, 2022
39ac521
remove ack override as I think we can get everything we need via queries
nicolaslara Nov 24, 2022
dc6119f
cleaner tests
nicolaslara Nov 25, 2022
4cd0b91
added bad ack test
nicolaslara Nov 25, 2022
0f178b4
added initial implementation of ack reporting to listeners
nicolaslara Nov 25, 2022
7a6c216
added ack listeners
nicolaslara Nov 28, 2022
c6f6b0b
added missing channel and refactored ack success
nicolaslara Nov 28, 2022
42dabdc
added recovery test
nicolaslara Nov 28, 2022
bf08ea3
added keeper and refactored types
nicolaslara Nov 30, 2022
f800288
cleanner acks with state in go
nicolaslara Nov 30, 2022
1b43cfc
removed unnecessary listeners
nicolaslara Nov 30, 2022
7d167c6
added IBC stargate message
nicolaslara Dec 1, 2022
955daf2
latest wasm
nicolaslara Dec 1, 2022
1d7351f
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Dec 1, 2022
2f48bf0
added ack callbacks
nicolaslara Dec 1, 2022
41de1b3
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 1, 2022
a119e98
updated bad import in tests
nicolaslara Dec 1, 2022
1b88cc7
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 1, 2022
a99bee2
gofumpt
nicolaslara Dec 1, 2022
d620ef2
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 1, 2022
c1f2c01
gofumpt
nicolaslara Dec 1, 2022
eff6127
remove unused file
nicolaslara Dec 1, 2022
3d67f77
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 1, 2022
696bc72
removed memo on callback packets and add tests for acks
nicolaslara Dec 2, 2022
ce4ef41
only removing the memo if the only key is the callback
nicolaslara Dec 2, 2022
832f251
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 2, 2022
a8dc7e6
added support for optional ack tracking
nicolaslara Dec 2, 2022
995e2b9
testing both paths
nicolaslara Dec 2, 2022
3be7e8d
added hardcoded channels
nicolaslara Dec 5, 2022
1646ea3
added crosschainswaps and swaprouter contracts
nicolaslara Dec 6, 2022
fb462a3
contract structure cleanup
nicolaslara Dec 7, 2022
4cbf3f5
reviewed swaprouter with new v13 params
nicolaslara Dec 7, 2022
db4b964
storing channels in state
nicolaslara Dec 7, 2022
dd65dff
simplified interface
nicolaslara Dec 7, 2022
2b33936
docs and removed optional key
nicolaslara Dec 7, 2022
1e131c1
fixed twap price base/quote asset
nicolaslara Dec 7, 2022
744c2ad
updated dependencies
nicolaslara Dec 9, 2022
dc74a03
added cleaner erroring for potential "reentrancy". Thanks @boss for t…
nicolaslara Dec 9, 2022
9236ddd
added next memo to the ibc packet
nicolaslara Dec 9, 2022
2e2f0aa
cleaned up errors
nicolaslara Dec 10, 2022
d44c9f7
renamed ibc_hooks to ibchooks
nicolaslara Dec 10, 2022
a03d6bb
renaming helper method
nicolaslara Dec 10, 2022
f289823
Merge branch 'main' into nicolas/transfer-ack-callback
nicolaslara Dec 10, 2022
9f41d4f
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 12, 2022
198a2b6
testing nested memo
nicolaslara Dec 12, 2022
c5eca71
Tiny PR to rename slipage variable to Slippage (#3669)
njerschow Dec 13, 2022
d5f5fe2
replace slippage on new tests
nicolaslara Dec 13, 2022
4e97d4f
new bytecode
nicolaslara Dec 13, 2022
cc3189c
make tests pass without ibc testing for now
nicolaslara Dec 13, 2022
004bb2b
added x86 bytecode
nicolaslara Dec 13, 2022
67d19cc
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Dec 13, 2022
19e02ae
added x86 version of swaprouter
nicolaslara Dec 13, 2022
1a2d640
gofumpt
nicolaslara Dec 13, 2022
5bdeb31
renamed callback key
nicolaslara Dec 13, 2022
1a1931a
added testing steps to readme
nicolaslara Dec 13, 2022
981dad6
Merge branch 'main' into nicolas/transfer-ack-callback
nicolaslara Dec 14, 2022
4987812
added missing store key to upgrade
nicolaslara Dec 14, 2022
bccc9a4
added apline debug image so that sh is available
nicolaslara Dec 14, 2022
0bfa4a3
fixed callback param
nicolaslara Dec 14, 2022
41157d9
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 14, 2022
87be57b
updated callback key
nicolaslara Dec 14, 2022
6efbaa7
remove old check
nicolaslara Dec 14, 2022
5c984c0
removing the directive to test
nicolaslara Dec 14, 2022
623b464
removing the second check as it breaks the yml file
nicolaslara Dec 14, 2022
4c19467
updated dependencies
nicolaslara Dec 14, 2022
7eb273b
only running on rust changes
nicolaslara Dec 14, 2022
b48a95d
better derives and fixed clippy warnings
nicolaslara Dec 15, 2022
abc5fa6
Merge branch 'nicolas/contract-checks-fix' into nicolas/crosschain-sw…
nicolaslara Dec 15, 2022
37c80f4
fixed readme
nicolaslara Dec 15, 2022
05fe3ae
Update x/ibc-hooks/wasm_hook.go
nicolaslara Dec 15, 2022
7d3566c
added test for empty memo
nicolaslara Dec 15, 2022
f83a3e2
renamed ibc hooks keeper
nicolaslara Dec 15, 2022
ade5cdd
Merge branch 'main' into nicolas/transfer-ack-callback
nicolaslara Dec 15, 2022
830cc72
updated deps
nicolaslara Dec 15, 2022
aadb41f
removed unused import
nicolaslara Dec 15, 2022
ba8bf7b
fofumpt
nicolaslara Dec 15, 2022
31821df
Merge branch 'nicolas/transfer-ack-callback' into nicolas/crosschain-…
nicolaslara Dec 15, 2022
c889d43
fixed if
nicolaslara Dec 15, 2022
f000ded
added x86 contract
nicolaslara Dec 15, 2022
171a2d5
added x86 contract
nicolaslara Dec 15, 2022
c0d1596
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Dec 19, 2022
c0df497
added transfer ownership to swaprouter
nicolaslara Dec 19, 2022
7551c5f
added transfer tests (and fix transfer)
nicolaslara Dec 19, 2022
7666e87
updated x86 wasm bytecode
nicolaslara Dec 19, 2022
5e7bf31
using swaprouter
nicolaslara Dec 19, 2022
f9679f2
x86 xchain swaps contract
nicolaslara Dec 20, 2022
9455ebb
cleanup
nicolaslara Dec 20, 2022
8bcfa04
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Dec 20, 2022
d1079d3
updated contracts based on feedback
nicolaslara Dec 21, 2022
39ef3ab
x86 bytecode
nicolaslara Dec 21, 2022
2406370
Update x/ibc-hooks/contracts/crosschain-swaps/Cargo.toml
nicolaslara Dec 22, 2022
23955d8
Merge branch 'nicolas/crosschain-swaps-new' into nicolas/lifecycle-co…
nicolaslara Jan 2, 2023
2265c54
refactored lifecycle complete message
nicolaslara Jan 2, 2023
2a1718e
use this branch for submodules
nicolaslara Jan 2, 2023
2fa497c
updated docs
nicolaslara Jan 2, 2023
6f1f063
tidy
nicolaslara Jan 2, 2023
6eb0388
x86 bytecode
nicolaslara Jan 2, 2023
0c62dac
copied doubled x86 contract. Will clean up on another PR
nicolaslara Jan 2, 2023
e8adf33
added a test for a failed swap
nicolaslara Jan 9, 2023
d1c0068
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Jan 9, 2023
f182970
Update x/ibc-hooks/contracts/crosschain-swaps/README.md
nicolaslara Jan 9, 2023
3a1ef05
clean comment
nicolaslara Jan 9, 2023
a8b48de
use fully qualidied name for reply perams
nicolaslara Jan 9, 2023
67726fc
removed old comment
nicolaslara Jan 9, 2023
ef1b729
namespacing status
nicolaslara Jan 9, 2023
42a12b5
qualify everything
nicolaslara Jan 9, 2023
8c48df3
rename path
nicolaslara Jan 9, 2023
61ebfaf
rename path
nicolaslara Jan 9, 2023
a6faf21
remove unnecessary whitelisted query
nicolaslara Jan 9, 2023
48ede84
ibc v4 error
nicolaslara Jan 9, 2023
edd9c8b
turned reply ids into an enum
nicolaslara Jan 9, 2023
831f442
updated timeput
nicolaslara Jan 9, 2023
1d87410
matching new reply id
nicolaslara Jan 9, 2023
23dfc1f
renamed Slippage
nicolaslara Jan 9, 2023
f8280aa
cleanup memo validation
nicolaslara Jan 9, 2023
6018ec5
comment
nicolaslara Jan 9, 2023
1e60bfa
renamed states to state
nicolaslara Jan 9, 2023
eb9c7a1
added timeoputs
nicolaslara Jan 9, 2023
0cb52f7
fix clippy
nicolaslara Jan 9, 2023
ca6c24f
added missing file
nicolaslara Jan 9, 2023
9df5366
added support for bytecode outside workdir
nicolaslara Jan 9, 2023
035bc58
added x86 contract
nicolaslara Jan 9, 2023
8040527
ci experiment
nicolaslara Jan 9, 2023
8aec22d
use absolute paths
nicolaslara Jan 9, 2023
566ecac
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Jan 11, 2023
7f579db
remove ack tracking
nicolaslara Jan 11, 2023
0a0bcab
slippage with window
nicolaslara Jan 11, 2023
3738a8d
better errors
nicolaslara Jan 11, 2023
ee834c6
testing with proper message
nicolaslara Jan 11, 2023
8ad57c8
fixed invalid memo
nicolaslara Jan 11, 2023
8d2d024
documentation
nicolaslara Jan 12, 2023
38d43a3
Merge branch 'main' into nicolas/crosschain-swaps-new
nicolaslara Jan 13, 2023
257f9d2
Update x/ibc-hooks/contracts/crosschain-swaps/src/execute.rs
nicolaslara Jan 13, 2023
f0bff16
interface cleanup
nicolaslara Jan 13, 2023
4dcf4dc
renamed height struct
nicolaslara Jan 13, 2023
5fad86d
fixed "tests"
nicolaslara Jan 13, 2023
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
8 changes: 6 additions & 2 deletions .github/workflows/contracts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
contract: [{workdir: ./x/ibc-rate-limit/, output: bytecode/rate_limiter.wasm, build: artifacts/rate_limiter.wasm, name: rate_limiter}]
contract: [
{workdir: ./x/ibc-rate-limit/, output: bytecode/rate_limiter.wasm, build: artifacts/rate_limiter.wasm, name: rate_limiter},
{workdir: ./x/ibc-hooks/, output: bytecode/crosschain_swaps.wasm, build: artifacts/crosschain_swaps.wasm, name: crosschain_swaps},
{workdir: ./x/ibc-hooks/, output: bytecode/swaprouter.wasm, build: artifacts/swaprouter.wasm, name: swaprouter},
]

steps:
- name: Checkout sources
Expand Down Expand Up @@ -82,7 +86,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
workdir: [./x/ibc-rate-limit]
workdir: [./x/ibc-rate-limit, ./x/ibc-hooks/]

steps:
- name: Checkout sources
Expand Down
44 changes: 44 additions & 0 deletions tests/ibc-hooks/ibc_middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,50 @@ func (suite *HooksTestSuite) TestCrosschainSwapsViaIBCBadAck() {
suite.Require().Greater(balanceRecovery.Amount.Int64(), int64(0))
}

// CrosschainSwapsViaIBCBadSwap tests that if the crosschain-swap fails, the tokens are returned to the sender
// This is very similar to the two tests above, but the swap is done incorrectly
func (suite *HooksTestSuite) TestCrosschainSwapsViaIBCBadSwap() {
initializer := suite.chainB.SenderAccount.GetAddress()
_, crosschainAddr := suite.SetupCrosschainSwaps(ChainA, false)
// Send some token0 tokens to B so that there are ibc tokens to send to A and crosschain-swap
transferMsg := NewMsgTransfer(sdk.NewCoin("token0", sdk.NewInt(2000)), suite.chainA.SenderAccount.GetAddress().String(), initializer.String(), "")
suite.FullSend(transferMsg, AtoB)

// Calculate the names of the tokens when swapped via IBC
denomTrace0 := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", "token0"))
token0IBC := denomTrace0.IBCDenom()
denomTrace1 := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", "channel-0", "token1"))
token1IBC := denomTrace1.IBCDenom()

osmosisAppB := suite.chainB.GetOsmosisApp()
balanceToken0 := osmosisAppB.BankKeeper.GetBalance(suite.chainB.GetContext(), initializer, token0IBC)
receiver := initializer
balanceToken1 := osmosisAppB.BankKeeper.GetBalance(suite.chainB.GetContext(), receiver, token1IBC)

suite.Require().Equal(int64(0), balanceToken1.Amount.Int64())

// Generate swap instructions for the contract. The min output amount here is too high, so the swap will fail
swapMsg := fmt.Sprintf(`{"osmosis_swap":{"input_coin":{"denom":"token0","amount":"1000"},"output_denom":"token1","slippage":{"min_output_amount":"50000"},"receiver":"%s"}}`,
receiver,
)
// Generate full memo
msg := fmt.Sprintf(`{"wasm": {"contract": "%s", "msg": %s } }`, crosschainAddr, swapMsg)
// Send IBC transfer with the memo with crosschain-swap instructions
transferMsg = NewMsgTransfer(sdk.NewCoin(token0IBC, sdk.NewInt(1000)), suite.chainB.SenderAccount.GetAddress().String(), crosschainAddr.String(), msg)
_, receiveResult, ack, err := suite.FullSend(transferMsg, BtoA)

// We use the receive result here because the receive adds another packet to be sent back
suite.Require().NoError(err)
suite.Require().NotNil(receiveResult)
suite.Require().Contains(ack, "calculated amount is lesser than min amount")

balanceToken0After := osmosisAppB.BankKeeper.GetBalance(suite.chainB.GetContext(), initializer, token0IBC)
suite.Require().Equal(balanceToken0.Amount, balanceToken0After.Amount)

balanceToken1After := osmosisAppB.BankKeeper.GetBalance(suite.chainB.GetContext(), receiver, token1IBC)
suite.Require().Equal(balanceToken1After.Amount.Int64(), int64(0))
}

func (suite *HooksTestSuite) TestBadCrosschainSwapsNextMemoMessages() {
initializer := suite.chainB.SenderAccount.GetAddress()
_, crosschainAddr := suite.SetupCrosschainSwaps(ChainA, true)
Expand Down
2 changes: 2 additions & 0 deletions x/ibc-hooks/.cargo/config
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[alias]
wasm = "build --release --lib --target wasm32-unknown-unknown"
Loading