Features
Wallet
Extra Data

Introduction

XELIS transactions have a powerful advantage: they can include extra data in the transaction itself.

This allows to have powerful services connecting the network with the real world and helping to build a decentralized ecosystem.

Each transaction can include up to 32 KiB of data shared across all transaction transfers (with a maximum set to 1 KiB per transfer).

XELIS wallets encrypt by default the data included in the transaction, so only the recipient can read it. To encrypt the data, we're generating a random shared key that is used to encrypt the payload, and is encrypted (PK * r) with both parties keys to be easily decrypted (SK * SH).

It is using the ChaCha20 encryption algorithm to encrypt the data with the shared key. No AEAD is used, to prevent any additional metadata used during a bruteforce.

Examples

As an example, you can insert a message in a transaction to send a note to someone or directly have a chat with someone without relying on a server to communicate and keep your identity private.

For exchanges, having a way to easily identify a deposit is also a good way to have a better user experience. This can be done by including a unique identifier in the transaction that will be used to identify the deposit and credit the user account.

Some shop could determine which product a customer want to buy, and include shipping information in the transaction to have a complete order in a single transaction.

But this is also useful for other services which request a proof of transaction, like a bill or a contract.

Lot of possibilities are available with integrated data, it just depends on your imagination and the services you want to build on top of XELIS.

Limitations

The data included in a transaction is limited to a sum of 32 KiB, and 1 KiB per transfer in its encrypted form.

This is a necessary limitation to prevent chain bloating and growing too fast in size disk terms.

While this is a good way to communicate in a decentralized context, you still have to trust the other party if it's a service that he will execute the action you requested.