CROSSINCH+
Stellar to Ethereum swaps via HTLCs using Limit Order Protocol, deployed cross-chain.
Problem Statement
CROSSINCH+ is a Atomic swap platform used to transfer XLM (Stellar's native token) and ETH (Ethereum's native token) between the Stellar and Ethereum blockchains using atomic swaps. It extends the 1Inch Limit Order Protocol (LOP) for Ethereum, for cross-chain operations using LimitOrderBuilder and deploying a contract to interact with stellar scripts parameters named HTLCPredicate within LOP, while implementing HTLC smart contract for Stellar to handle XLM transfers. The current resolvers are custom built for implementation.Core System Cross-Chain Bridge: Moves tokens (XLM ETH) between Stellar and Ethereum Holesky Atomic Safety: Guarantees either both transfers complete or both fail - no stuck funds Frontend Integration: React interface for user-friendly swap execution Bridge Server: 1inch LOP LimitBuilder that coordinates cross-chain operations with HTLC contracts.Technical ArchitectureFlow: Frontend → Bridge Server → Cross-Chain Script → Blockchain ContractsStellar Side:Uses your Hashlock hex preimage formatcontract calls with proper contractInt implementationEvent extraction for swapId from blockchainSHA256-based hashlock validationEthereum Side:Uses standard ethers.js UTF-8 formatHTLC predicate registration and validationETH Holesky transfers between walletsKeccak256-based hashlock validationWhat Actually HappensUser enters amounts Bridge server receives request and spawns transfer script Stellar: XLM gets locked in HTLC contract Ethereum: HTLC predicate gets registered with hashlock Stellar: User claims XLM, revealing secret on blockchain Ethereum: User claims ETH using revealed secret Result: Tokens moved atomically between chains1INCH SIDE:What You Do: Create a Limit Order The relayer/maker signs a 1inch limit order offering ETH, using a custom HTLC predicate.Use an HTLC Predicate The order’s validity depends on:The user revealing a valid preimageThe claim happening before a timelockThis logic is enforced in your HTLCPredicate.sol contract.User Claims Stellar Swap → Gets Preimage The user first claims tokens on Stellar using the secret.Fill 1inch Order Using Preimage The user (taker) uses LimitOrderProtocol.fillOrder(...) and supplies the preimage as interaction.Predicate Verifies → ETH Released If the predicate approves (preimage matches, not expired), ETH is transferred to the user.
Solution
1)Used LimitOrderBuilder.buildLimitOrder() by one-inch which handles all the struct formatting and ABI encoding needed to match one-inch LOPs smart contract's requirements. This is the first time it has been implemented for stellar chain.We extended the limit-order-protocol on oneinch at evm side by deploying a contract which interacts with oneinch and stellar parameters.We used stellar's timelock and hashlock contract functionality to preserve transaction credentials and allows for secure transfer and claim untill the preimage and hash has been passed.The type parameters for Ethereum and Stellar are complete opposite it was a nightmare to have them defined, build, deployed and work but without compromising flow of funds we did that.5)Smart Contracts:Solidity: HTLC Predicate contract extending 1inch LOP Rust: Stellar HTLC smart contract (Soroban) 1inch LOP v4: Base limit order protocol6)Backend:Node.js: Cross-chain bridge logic and API endpoints Ethers.js: Ethereum blockchain interaction Stellar SDK: Stellar network integration Express.js: REST API for price feeds and swap executionCoinMarketCap for live price updates of XLM and ETH tokens.
Hackathon
ETHGlobal Unite
2025
Contributors
- daiwikmh
24 contributions