Ethereum Interop Layer EIL SDK Workshop I Alex Forshtat, Dror Tirosh, Shahaf Nacson and Ofir Eliasi
ETHGlobal·Tue, Dec 9, 2025, 12:00 AM
Speakers
Join Alex Forshtat, Dror Tirosh, Shahaf Nacson and Ofir Eliasi for a workshop titled "Ethereum Interop Layer EIL SDK Workshop", featured at ETHGlobal Buenos Aires 2025! _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 🇦🇷 *ETHGlobal Buenos Aires* This workshop is specifically for ETHGlobal Buenos Aires, a 3-day hackathon held November 21-23 at the Centro de Convenciones Buenos Aires, bringing together the most skilled web3 developers, designers and product builders from all around the globe for a weekend-long adventure to advance the Ethereum ecosystem! Watch the full ETHGlobal New Delhi 2025 playlist here: https://www.youtube.com/playlist?list=PLXzKMXK2aHh76O7FfAHPJkZcqTIfYpoyf _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ✅ *Follow ETHGlobal* X: https://x.com/ETHGlobal Warpcast: https://warpcast.com/ethglobal Website: https://ethglobal.com YouTube: https://www.youtube.com/c/ETHGlobal _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _Are you interested in Ethereum development and entrepreneurship?_ 👉 Sign up for the next ETHGlobal event: https://ethglobal.com/events 🎁 Get exclusive access and perks with ETHGlobal Plus! https://ethglobal.com/plus 📣 Want us to throw an event in your city? Tell us where! https://ethglobal.com/city
Transcript
Hello everybody. Uh my name is D. I work with the F. We work on the trustless team and um I'm here to present the EIL uh our crosschain permissionless transfer. What [laughter] is the entire title?
uh the LS SDK um I'll get back to it uh later. Basically, it's an SDK that lets you do a token transfer in a permissionless way between different chains between L2s. A bit of an overview of what we do here. We see two uh operations I want to do. This is a simple example like I want to run some to execute something on arbitrum like I want to run a swap or probably I want to do a proof first.
So multiple operation I want to run on the first chain and then I want to use it to do something else on the destination chain. If it's base I want to buy an NFD. So and for that I need to uh move some assets some tokens from the from the source chain arbitrum to the destination chain base and the EL come to give you a solution a tool uh tool chain to do exactly this. So how we do it? Let's break it into the terminology we use.
Uh we call each each blob we run like a batch. There's a batch running on the source chain. Uh which will do run multiple actions approval and some action call and then uh we create another batch for the destination chain base which will accept this voucher and use it. uh the voucher is a mech is a terminology we use for the mechanism to move tokens uh from one side to the other and uh I will try to walk through through the IP APIs how you do it inside the the application. So what does the uh SDK give you?
We have some core components. Uh we see we have the cross SDK. This is the SDK contract itself. uh when you use it you build what we call the crosschain builder. This is the tool that you build a graph of component components.
Uh within the crosschain builder which create you a full crosschain operation. You have a batch builder for each uh batch as we saw that run on a single chain and inside it a sequence of actions translated into uh calls made from the account uh to run the implementation. uh the account of course I didn't say it but uh obviously it is it is a account abstraction which support uh batches of transactions and the SDK also handles the gas transfers like you pay on the source chain but everything else is paid for on the destination chain the SDK also give you some helper contracts like a multi-chain contract uh which wraps a contract that appears on multiple uh chains and multi-chain smart account again account on multiple chains. So how do I start uh to work? I start with I I bring up uh the crosschain SDK.
It's a simple class. It can get a configuration in which you can define the network it connects some uh timeout parameters but it works by default. We configured it so it will work in the hackathon. We built up a network thanks to tenderly. We have uh four networks we connect to arbitum, ethereum, uh base and optimism.
It's four networks like and of course these are forks. These are not real networks. We will provide you with a faucet with a tokens and gas that you can use. Uh but of course any other protocol you are using on top of them you can use and see uh liquidity pools and oracles and whatever from the real chains. Just please remember don't use your p real network private keys within this environment.
This is a test environment. Uh so you bring up the SDK. It's a single contract. Uh and the first thing you do I gave you as an example. You bring up the multi-chain token.
A multi-chain token is a is its a name and a the chain and addresses it appears on uh in the samples we have a tokens file for multi first several uh useful tokens USDT USDC WC but you can add more uh whatever you like for any token that exist uh on real networks once you created the SDK Okay, you bring up a builder like create builder and then from the builder you start a batch. You can see here I started a batch run on arbit room and you can usually end it with end batch. Um within a batch I had a an action uh so an action you see this is a simple transfer action. We'll see later how it is built. But an action gets a contract, a function name.
The contract can wrap the API or not. Uh and the value uh the value can either be actual value that you want to transfer and also uh it can be a runtime variables runtime value a value that you can only detect during the execution like the result of a previous call like the balance of and then you want to use that amount specific to run as an action
on the chain. Yeah. Okay.
Yes.
You have to have keep kind of track of, you know, how many were issued. And you're saying that like we move it as a kind of a burden. Uh not exactly when when you take US real USD and buy USDC somewhere. Yes, Circle did some work. They put this your your real money in some treasury I don't know some bank account and they mint you some USDC token.
We are not doing that. You have USDC but they support they support US they support USDC on different chains. What we are letting you is you put you give your money in one chain and you get the exact same amount of USDC on another chain. We're doing cost rate transfer. We are doing nothing uh related to real dollars like you can transfer bat token.
You can transfer whatever token you like which are not related. It doesn't have to be a stable coin. Come and speak. Come speak to the microphone. uh to elaborate the way the SDK works uh right now is that the uh assets that you get on the destination chain has to already exist there.
We don't create a robed bridge version of that asset on that chain and there is no like kind of like locked forever equivalent on the origin chain. We are looking at it as an existing asset that is equivalent to the one on the origin chain. So if it does not exist like some other projects I'm sure like create developed bridged version and it's a question of like liquidity providers if they consider this to be equivalent they can uh provide the liquidity but like in case of the circle there is already deployment on very many chains.
That's a great answer.
Yeah.
Okay. So we created a batch we want to do run actions. Let's go deeper. What is an action? it it's a wrapper for a function call and it was built in a way that we can have more complex actions.
So the basic action uh we already show it as a transfer action like you provide it a token usually it's a a multi-chain token when you add this action it knows to use the right address of this token on this specific chain. Uh but if you want to write yourself an action this is an example this is the actual code of how we implemented the transfer action. There is a code that for you see address on this is the place we decode the actual address of this specific chain and we return a a call object to be used actually on on chain when we uh create a useration of it. Uh there is an SDK created for stitch by team. They created a lot actions for a lot of defy operations that you can use more for operation and lending and borrowing and everything.
Instead of this blob, we just created transfer approve sorry and general action. This is general action.
Okay, we actually um create a bit more than that. What uh we did is first is a great examples of how to run uh EIL SDK. Um uh that means like besides having like a lot of unit tests, we al actually extended base action. So in that case if you uh and that's probably needed to extend the the the the functionality then you can do that.
Okay.
I have a question.
Sure. Sure.
It's public. I
Yeah. No no no I just I I specifically for this I um I launch it um I published the link on my uh Twitter. So you can see that and my Twitter. Yes.
No we we'll send it everything in the group.
Pin a message with everything.
My my Twitter is very simple. It's a real you can find it and the link to there is that uh to that is there but I'm saying it's a good there are some first they're very usable all the extension for uh uh other D5 protocols and you can learn easily how to do that for those examples but also uh we add some couple of element classes that can be uh uh very handy if you want to do the same like how you split it how you do um uh how you inherit from uh from EIL action and so on. So check it out. It's going to have like a lot of ways to deal with that.
Offchain element that is here.
Okay. First of all, when you create an application, I will demonstrate but I don't have to have time to demonstrate it during this talk. Uh we have a Okay. Uh when uh we'll probably we'll put in everything in the telegram group. So we will make sure that we end all in sync.
You have the application. The application like move funds from network A to network B. This is the this is the application. It uses a wallet. We integrated with the AMI wallet.
So right now this is the wallet here you can use. You sign once for all this flow. This is the feature you get from the wallet a single signature and then the SDK runs the operation we didn't get to the execute but odd all chains now in order to move the funds from chain A to chain B yes you need a provider but it's not that you as an application contact this uh provider you submit a user operation on chain it gets on chain the emits an event the provider sees this event lock they lock your amount and give you what we call a voucher. We can talk later about how this I'm not getting into how this is permissionless, how this is not relying on any central service, how different providers can you but this is this is everything that runs in the background so that you will be able to get it on the destination chain and continue to run from there.
Thank you. So,
okay.
Um, two two points. Can you elaborate on what what were the latest developments that enabled this possibility and how is this different than the current bridging solutions out there? This h the idea here is how to do a permissionless uh cross transfer and execution. uh with bridges uh look we had a two today permissionless talks about how bridges centralized and how our solution is decentralized and I have five minutes to talk about I I'll be glad to talk with you but during this talk is a bit difficult to cover why it is permissionless we okay why [snorts] it is these are atomic swap why it's permissionless why you don't trust a single entity Okay.
Uh so first on all communication is onchain. You don't pin to URL and ask him to do something. Second is full self custody. So you don't delegates to someone to do the action on your behalf. You just you execute.
You use a call data using account abstraction as it was always the case. Um and spec specifically it's optimistic. So like the liquidity provider provided optimistically but there is a full onchain disputer resolution. So there is no like voting with a token that we issued and then like you the majority holder of the token decides the dispute. It's like onchain using the state of the networks and the networks are bound to Ethereum.
So like it's immediately resolved. So there is no way for for it to not to follow the rules of the chains involved. Like the chains involved they are they have their own like set of things. Yeah. We want to [laughter]
we're two minutes out. Okay.
Oh. Oh yeah. Sorry then I keep I'll keep it short. There are no trusted ent there are no trusted entities in the system other than Ethereum and the under and the L2 and the L2s you are using. That's the only like so we only trust canonical bridges for the at for the uh uh for disputes.
There is no uh no oracles nothing like no components to trust. No one ever transacts on your behalf. Uh okay I
okay the last the last component I didn't get once you complete the graph you build the batches you call the you execute them basically you call build and sign it will pop up your wallet to sign the request and since the operation is multi-step it's a and you would like to add your pro progress uh to your users says so it has a call back it says okay I'm at this state started execute done executing waiting for a voucher executing next you will set a set of callbacks or failed if there is some error and uh it finishes uh this operation uh we have three samples one command application a simple capture the flag that performs two string operations on chain and a full-fledged defy application stitch uh which is much more complex and adds a lot of layers on top of that.
No, just the link.
Of course, of course. I just want to say that mentioned that there is like uh you can check it on uh uh the stitch app the stitch.app app and you can see first like uh an implementation of uh uh EIL SDK but also if you can check logs you will see in logs that we we actually provided a very nice way of uh uh of showing what's going behind the scene and you can see exactly the the the events going and how the execution goes like the entire objects are are shared there. So it's a good way to start to understand what's going on behind the scene, how the the EIL SDK operates because what's uh executed before what and how it's going to be. So check it out over there.
It's going to be uh it's it's supposed to be very simple to understand and it's going to help you to uh to accelerate faster development.
Okay. Any more questions? Okay, thank you. [applause]
Automatic transcript — names and jargon may be misspelled.