Tact has basic support for strings. Strings support unicode and don't have any special escape characters like \n
.
The use of strings in smart contracts should be quite limited. Smart contracts are very exact programs for managing money, they're not intended for interactive CLI.
Strings are immutable. Once a sequence of characters is created, this sequence cannot be modified.
If you need to concatenate strings in run-time, you can use a StringBuilder
. This object handles gas efficiently and supports append()
of various types to the string.
import "@stdlib/deploy"; contract Variables with Deployable { // contract variables are persisted in state and can change their value between transactions // they cost rent per their specified size contractVar1: Int as coins = ton("1.26"); contractVar2: Int as uint64; init(arg1: Int) { // contract variables support complex initializations that are calculated in run-time self.contractVar2 = min(arg1, pow(2, 64) - 1); } // receivers handle incoming messages and can change state receive("increment") { // local variables are temporary, not persisted in state let localVar1: Int = 100 * 1000; localVar1 = localVar1 * 2; // contract variables that are persisted in state can only change in receivers self.contractVar1 = self.contractVar1 + 1; self.contractVar2 = self.contractVar2 + 1; } // getters are executed by users to query data and can't change state get fun sum(arg1: Int): Int { // local variables are temporary, not persisted in state let localVar1: Int = 100 * 1000; localVar1 = localVar1 * 2; // getters can access everything but for read-only operations only return arg1 + self.contractVar1 + localVar1; } }