Skip to content

C# translation overview

Pravda project allows you to write programs in subset of C# language. Pravda Translator translates CIL to Pravda bytecode.

Supported C# subset

Pravda Translator supports only part of all C# features.

For the moment it supports the following: - Access to the storage via class fields; - Access to the storage via Mapping<K, V> (get, getDefault, put, exists methods); - Access to sender address via Info.Sender() method; - Access to list of contract's callers' addresses via Info.Callers() method; - Class methods that are translated to program methods; - Integer primitive types (int, short, byte, uint) and bool; - Basic arithmetics and logical operations; - Local variables and method arguments; - If conditions and loops; - Strings and auxiliary methods (+, access to particular chars, Slice); - Bytes (immutable byte arrays), auxiliary methods (access to particular bytes, Slice, Concat), creation from byte[]: new Bytes(bytes_array); - Arrays of primitive types (int, byte, String), reading and writing of particular elements; - Explicit conversion of primitive types via System.Convert.ToByte, System.Convert.ToChar,System.Convert.ToInt16,System.Convert.ToInt32,System.Convert.ToDouble,System.Convert.ToBoolean,System.Convert.ToString - Cryptographic functions: Ripemd160 hashing, validation of Ed25519 Signature. See more in Standard library docs. - User defined classes (although you can't store them in the storage yet). - Calling other programs via ProgramHelper.Program<...> interface. See some examples (Pcall.cs, PcallProgram.cs). - Create events in your program via Log.Event("name of event", <some_data>), see Event.cs

Things that are not supported: - Standard C# library (except of some specific functions from the list above); - Standard C# collections.


You can look at several examples of test programs to learn current abilities of translation: - String examples that show how to operate with Strings. - Array examples that show how to operate with arrays. - Simple program with balanceOf and transfer methods similar to 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 poker game on the blockchain. _(poker.cs was provided by Ducatur team)