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.

Important note: All code placed in Expload.Pravda namespace is ignored. It is needed to support stub methods in Pravda.dll.


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)