C# Translation Overview
The Pravda project allows you to write programs in the subset of C# language. The Pravda Translator translates CIL to Pravda bytecode.
Supported C# Subset
The Pravda Translator only supports certain C# features.
Notably, it currently supports the following features:
- Access to the storage via class fields.
- Access to the storage via
Mapping<K, V> (
- Access to the sender address via
- Access to the list of contract callers' addresses via
- Class methods that are translated to program methods.
- Integer primitive types (
- Basic arithmetics and logical operations.
- Local variables and method arguments.
- If-conditions and loops.
Strings and auxiliary methods (
+, access to particular chars,
Bytes (immutable byte arrays), auxiliary methods (access to particular bytes,
Concat), creation from
- Arrays of primitive types (
String), reading and writing of particular elements;
- Explicit conversion of primitive types via
- Cryptographic functions: Ripemd160 hashing, validation of Ed25519 Signature. See more in Standard library docs.
- User defined classes (although you cannot store them in the storage yet).
- The calling of other programs via
You can check out the examples here: (Pcall.cs, PcallProgram.cs).
- Create events in your program via
Log.Event("name of event", <some_data>), see Event.cs
Features that are not supported: - Standard C# library (except for some specific functions from the list above); - Standard C# collections.
Important note: The entire code placed in the
Expload.Pravda namespace is ignored.
It is needed to support stub methods in
You can have a look at several examples of test programs that illustrate the current translation abilities:
- String examples that show how to operate
- Array examples that show how to operate arrays.
- Simple program with
transfer methods similar to the corresponding methods from ERC20
- Buffer -- Dynamic resizable array implemented in C#.
- Zoo program that allows you to create zoos, pets and breed them.
- Poker program that implements simple a poker game on the blockchain. _(poker.cs was provided by Ducatur team)