Articles in this series:
- Plasma on Loom Network DAppChains: Scalable DApps With Ethereum-Secured Assets
- Practical Plasma (Volume I): Gaming
- Plasma Cash Initial Release — Plasma-Backed NFTs Now Available on Loom Network Sidechains 👈
Two months ago, we announced that we were adding Plasma Cash to Loom Network.
Today, we’re proud to release our initial implementation of Plasma Cash, which allows the use of ERC721 non-fungible tokens on Loom sidechains.
That means users will now be able to have gas-less transactions and sub-second confirmation times on sidechains, all while having their token fully backed by the security of Ethereum mainnet.
Plasma Cash Smart Contracts Now Open Source
Developers, you can find the source code for our implementation on our github:
We’ve also announced our release on ethresear.ch for public auditing by the Plasma community.
We look forward to future contributions from other developers and projects building on top of our initial code release.
Current Implementation and Next Steps
Since our initial focus at Loom Network is building blockchain games like Zombie Battleground, our initial implementation of Plasma Cash is specifically for ERC721 non-fungible tokens.
Porting the code to handle ETH, ERC20s, and other types of tokens is fairly trivial, but will require more comprehensive tests.
For our purposes, being able to utilize Plasma Cash for non-fungible tokens like ERC721s opens up a number of important use cases in gaming. Thus, this was the very first use case we chose to tackle.
Next Steps — Token Splitting and Merging
Our next steps are to add support for ERC20 tokens and ETH.
Research is still ongoing on efficient constructions for token splitting and merging on the Plasma chain, and currently no clear consensus has been reached on the best way to move forward with this. A research construction called Plasma Debit aims to partially solve this issue
We will be actively collaborating with the Plasma research team over the coming months to find the best way to work with token splitting on Plasma chains.
Last week our lead Plasma researcher, Georgios Konstantopoulos, joined Joseph Poon, Karl Floresch, et al. on the official Plasma Implementer’s Call:
Until there is consensus on how to handle token splits and merges on the Plasma chain, Loom SDK developers will still be able to use the Loom Transfer Gateway to use these fungible assets on the sidechain.
Technical Overview: Movement of a Token Between Mainnet and the Plasma Chain
The Plasma Cash implementation is made up of a Plasma smart contract that lives on Ethereum mainnet, and a Loom sidechain smart contract that communicates with the Plasma contract.
In order to use an ERC721 token on the sidechain, the user first sends their token to the Plasma contract.
After the token is received, the Plasma contract emits a
Deposit event, which is picked up by the listening sidechain. The sidechain proceeds to create a block with a single transaction (this makes the exit process easier) that includes the deposited asset.
The user is then credited with a special Plasma Cash token on the sidechain that represents their ownership of the token on Mainnet. They’re free to transact and use that token on the sidechain in any way, including transferring it to other users on the sidechain (by providing a signed transaction to prove the other user is the new owner of the token).
The sidechain periodically “checkpoints” to Mainnet by committing the Merkle root of its blocks to the Plasma contract, showing any changes in ownership of the token.
When the user wants to exit their token from the sidechain, they submit an exit request directly to the Plasma contract on Mainnet (along with a signed transaction from the previous owner as proof if the token was transferred to them).
The token then enters a “challenge period”, in which a challenger can submit evidence of signed transactions that prove the user trying to exit the token is not its valid owner.
If the challenge period passes with no successful challenge, the user is able to withdraw their token from the Plasma Contract.
Thus, users are able to deposit and withdraw their tokens directly within the Mainnet Plasma contract, removing any risk of the token being stolen from them by the sidechain.
Loom–Plasma Flow Diagram:
The basic flow between the user, Plasma Cash smart contract on Ethereum mainnet, and Loom sidechain can be seen in the following diagram:
We will be releasing more technical documentation for developers in the near future, but in the meantime, developers can read the source code on github.
George recently presented our findings at the Plasma Research Meetup in Tokyo, along with OmiseGo, which will be compiled into an article in the next week or two:
User Experience and Future Improvements
The user experience for a Plasma Exit will be very similar to existing experiences with MetaMask or other mobile wallets — the user will simply need to sign a transaction to initiate the exit:
The main difference with Plasma is that instead of having a near-instant transaction, the user will need to wait until their exit passes the challenge period and can be finalized.
Thus the user experience when using Plasma Cash is currently weak. However, it can potentially be mitigated using a few optional services that may be developed in the future:
After the user requests to exit their token, they could “trade” their token for an equivalent one from a party who does not mind waiting the full challenge period.
The Liquidity Provider would charge a service fee for the trade. This way, the user can pay a fee in order to get their token back immediately and not have to wait the challenge period.
This is being discussed in a recent thread in ethresear.ch.
Delegated Exits and Watchtowers
Other services that could improve the Plasma Cash user experience are Delegated Exits and Watchtowers.
Even though the Plasma technique provides the guarantees that a user cannot have their coin stolen, it requires that the user manually call the function on the smart contract to exit their token, as well as monitor the contract for invalid exit attempts of their token so they can challenge it.
These UX inconveniences could be mitigated with semi-trusted services that perform these functions on behalf of the user.
For example, a “Delegated Exit” service could allow the user to auto-withdraw their token if it is idle on the sidechain for more than 1 hour.
Likewise, a “Watchtower” service could monitor the Plasma contract and challenge invalid exits on behalf of users.
There is no seemingly good way to make this process trustless, meaning that a user who uses such services would be vulnerable to that service colluding with adversaries to steal their tokens. But such services would be completely optional, for scenarios where users would rather choose convenience over full trustlessness.
As you can see, there are still a number of potential complications with the Plasma Cash UX, and this is an area that requires further research.
Coming Soon to ZombieChain
In the next week, we’ll be rolling out the testnet of ZombieChain, and the mainnet will be soon to follow.
If you missed our previous announcement, ZombieChain is a shared DPoS sidechain to Ethereum with sub-second block times.
Developers can deploy their Solidity contracts to ZombieChain and run them for a fixed monthly hosting fee, and their users can experience gas-free transactions, making it ideal for user-facing DApps and games.
You can check out the full announcement here.
Today’s release adds the Plasma Cash functionality to the Loom SDK, for any developers who want to use it on their own sidechains.
But we understand that deploying and running these things in production is complicated, and most DApp developers want to simply focus on building their applications — not running their own blockchain infrastructure.
For that reason, we’ll be adding Plasma Cash functionality to ZombieChain and making it available to all developers on the platform.
This will allow ZombieChain developers to give their users the benefits of Plasma Cash out of the box without any additional configuration, and will allow us to experiment with providing services — like the Liquidity Providers discussed above — to all users on the network.
We’re truly excited to release this contribution to the blockchain world, and look forward to future collaborations to add additional functionality and further improve the Plasma user experience.
Loom Network is the multichain interop platform for scaling high-performance dapps — already live in production, audited, and battle-tested.
Deploy your dapp to Loom’s Basechain once and reach the widest possible user base across all major blockchains today.
New to Loom? Start here.
Want to stake your LOOM tokens and help secure Basechain? Find out how.
Like what we’re doing here? Stay in the loop by signing up for our private mailing list.