Skip to content

Latest commit

 

History

History
401 lines (272 loc) · 22 KB

scriptfunc.rst

File metadata and controls

401 lines (272 loc) · 22 KB

Встроенные функции языка написания контрактов

Функции языка написания контрактов выполняют операции с данными полученными в секции data контракта: чтение значений из базы данных и запись значений в базу данных, преобразование типов значений и установление связи между контрактами.

Функции не возвращают ошибок, так как все проверки на ошибки происходят автоматически. При генерации ошибки в любой из функции, контракт прекращает свою работу и выводит описание ошибки в специальном окне.

Получение значений из базы данных

DBAmount(tblname string, column string, id int) money

Функция возвращает значение колонки amount с типом money c поиском записи по значению указанной колонки таблицы. (Для получения данных типа money нельзя использовать функции DBInt() и DBIntExt(), возвращающие значения типа int).

  • tblname - имя таблицы в базе данных;
  • column - имя колонки, по которой будет идти поиск записи;
  • id - значение для поиска записи, выборка column=id.
mymoney = DBAmount("dlt_wallets"), "wallet_id", $wallet)

StateValue(name string) string

Функция возвращает значение указанного параметра из настроек государства (таблица state_parameters).

  • name - имя получаемого параметра.
Println( StateValue("gov_account"))

DBInt(tblname string, name string, id int) int

Функция возвращает числовое значение из таблицы базы данных по указанному id записи.

  • tblname - имя таблицы в базе данных.
  • name - имя колонки, значение которой будет возвращено.
  • id - идентификатор поля id записи, из которой будет взято значение.
var val int
val = DBInt(Table("mytable"), "counter", 1)

DBIntExt(tblname string, name string, val (int|string), column string) int

Функция возвращает числовое значение из таблицы базы данных с поиском записи по указанному полю и значению.

  • tblname - имя таблицы в базе данных.
  • name - имя колонки, значение которой будет возвращено.
  • val - значение, по которому будет искаться запись.
  • column - имя колонки, по которой будет искаться запись; таблица должна иметь индекс по данной колонке.
var val int
val = DBIntExt(Table("mytable"), "balance", $wallet, "wallet_id")

DBIntWhere(tblname string, name string, where string, params ...) int

Функция возвращает числовое значение из колонки таблицы базы данных с поиском записи по условиям указанным в where.

  • tblname - имя таблицы в базе данных.
  • name - имя колонки, значение которой будет возвращено.
  • where - условия запроса для выборки записей; имена полей располагаются слева от знаков сравнения; для подстановки параметров используются символы ? или $.
  • params - параметры, подставляемые в условия запроса в заданной последовательности.
var val int
val = DBIntWhere(Table("mytable"), "counter",  "idgroup = ? and statue=?", mygroup, 1 )

DBString(tblname string, name string, id int) string

Функция возвращает строковое значение из колонки таблицы базы данных по id записи.

  • tblname - имя таблицы в базе данных.
  • name - имя колонки, значение которой будет возвращено.
  • id - идентификатор поля id записи, из которой будет взято значение.
var val string
val = DBString(Table("mytable"), "name", $citizen)

DBStringExt(tblname string, name string, val (int|string), column string) string

Функция возвращает строковое значение из таблицы базы данных с поиском записи по указанному полю и значению.

  • tblname - имя таблицы в базе данных;
  • name - имя колонки, значение которой будет возвращено;
  • val - значение, по которому будет искаться запись;
  • column - имя колонки, по которой будет искаться запись. Таблица должна иметь индекс по данной колонке.
var val string
val = DBStringExt(Table("mytable"), "address", $Company, "company" )

DBStringWhere(tblname string, name string, where string, params ...) string

Функция возвращает строковое значение из колонки таблицы базы данных с поиском записи по условиям указанным в where.

  • tblname - имя таблицы в базе данных.
  • name - имя колонки, значение которой будет возвращено.
  • where - условия запроса для выборки записей; имена полей располагаются слева от знаков сравнения; для подстановки параметров используются символы ? или $.
  • params - параметры, подставляемые в условия запроса в заданной последовательности.
var val string
val = DBStringWhere(Table("mytable"), "address",  "idgroup = ? and company=?",
       mygroup, "My company" )

DBGetList(tblname string, name string, offset int, limit int, order string, where string, params ...) array

Функция возвращает массив со списком строковых значений одной колонки у записей таблицы, полученных по условиям указанным в where.

  • tblname - имя таблицы в базе данных;
  • column - имя колонки, из которого будут браться значения;
  • offset - смещение для начала выборки записей;
  • limit - количество получаемых записей, если ограничение не нужно значение параметра -1;
  • order - сортировка по колонкам; может быть пустой строкой;
  • where - условия запроса для выборки записей; имена полей располагаются слева от знаков сравнения; для подстановки параметров используются символы ? или $;
  • params - параметры, подставляемые в условия запроса в заданной последовательности.
var ret array
ret = DBGetList(Table("mytable"), "name", 0, -1, "", "idval > ? and idval <= ? and company=?",
                 10, 200, "My company")

DBGetTable(tblname string, columns string, offset int, limit int, order string, where string, params ...) array

Функция возвращает ассоциативных массивов типа map, содержащий список значений перечисленных колонок записей таблицы, полученных по условиям указанным в where. Все значения в ассоциативном массиве имеют тип string, поэтому впоследствии их следует приводить к нужному типу.

  • tblname - имя таблицы в базе данных;
  • columns - имена получаемых колонок разделенные запятой;
  • offset - смещение для начала выборки записей;
  • limit - количество получаемых записей, если ограничение не нужно значение параметра -1;
  • order - сортировка по колонкам; может быть пустой строкой;
  • where - условия запроса для выборки записей; имена полей располагаются слева от знаков сравнения; для подстановки параметров используются символы ? или $;
  • params - параметры, подставляемые в условия запроса в заданной последовательности.
var ret array
ret = DBGetTable(Table("mytable"), "name,idval,company", 0, -1, "", "idval > ? and idval <= ? and company=?",
                 10, 200, "My company")
var i int
while i<Len(ret) {
    var row map

    row = ret[i]
    myfunc(Sprintf("%s %s", row["name"], row["company"]), Int(row["idval"]) )
    i++
}

Изменение значений в таблицах

DBInsert(tblname string, params string, val ...) int

Функция добавляет запись в указанную таблицу и возвращает id вставленной записи.

  • tblname - имя таблицы в базе данных.
  • params - список через запятую имен колонок, в которые будут записаны перечисленные в val значения.
  • val - список через запятую значений для перечисленных в params столбцов; значения могут иметь строковый или числовой тип.
DBInsert(Table("mytable"), "name,amount", "John Dow", 100)

DBUpdate(tblname string, id int, params string, val...)

Функция изменяет значения столбцов в таблице в записи с указанным id.

  • tblname - имя таблицы в базе данных.
  • id - идентификатор id изменяемой записи.
  • params - список имен изменяемых колонок; перечисляются через запятую.
  • val - список значений для указанных столбцов перечисленных в params; могут иметь строковый или числовой тип.
DBUpdate(Table("mytable"), myid, "name,amount", "John Dow", 100)

DBUpdateExt(tblname string, column string, value (int|string), params string, val ...)

Функция обновляет столбцы в записи, у которой колонка имеет заданное значение. Таблица должна иметь индекс по указанной колонке.

  • tblname - имя таблицы в базе данных.
  • column - имя колонки, по которой будет идти поиск записи.
  • value - значение для поиска записи в колонке.
  • params - список имен колонок, в которые будут записаны значения указанные в val; перечисляются через запятую.
  • val - список значений для записи в колонки перечисленные в params; могут иметь строковый или числовой тип.
DBUpdateWhere(Table("mytable"), "address", addr, "name,amount", "John Dow", 100)

Вызов контрактов

CallContract(name string, params map)

Функция вызывает контракт по его имени. В передаваемом массиве должны быть перечислены все параметры, указанные в section data контракта.

  • name - имя вызываемого контракта.
  • params - ассоциативный массив с входными данными для контракта.
var par map
par["Name"] = "My Name"
CallContract("MyContract", par)

ContractAccess(name string, [name string]) bool

Функция проверяет, совпадает ли имя выполняемого контракта с одним из имен, перечисленных в параметрах. Как правило используется для контроля доступа контрактов к таблицам. Функция прописывается в полях Permissions при редактировании колонок таблицы или в полях Insert и New Column в разделе Table permission.

  • name - имя контракта.
ContractAccess("MyContract")
ContractAccess("MyContract","SimpleContract")

ContractConditions(name string, [name string]) bool

Функция вызывает секцию conditions из контрактов с указанными именами. У таких контрактов блок data должен быть пустой. Если секция conditions выполнилась без ошибок, то возвращается истина. Если в процессе выполнения сгенерировалась ошибка, то родительский контракт также завершится с данной ошибкой. Эта функция, как правило, используется для контроля доступа контрактов к таблицам и может вызываться в полях Permissions при редактировании системных таблиц.

  • name - имя контракта.
ContractConditions("MainCondition")

Операции со значениями переменных

Float(val int|string) float

Функция преобразует целое число int или string в число с плавающей точкой.

  • val - целое число или строка.
val = Float("567.989") + Float(232)

HexToBytes(hexdata string) bytes

Функция преобразует строку с шестнадцатеричной кодировкой в значение типа bytes (последовательность байт).

  • hexdata - строка, содержащая шестнадцатеричную запись.
var val bytes
val = HexToBytes("34fe4501a4d80094")

Int(val string) int

Функция преобразует строковое значение в целое число.

  • val - строка содержащая число.
mystr = "-37763499007332"
val = Int(mystr)

Len(val array) int

Функция возвращает количество элементов в указанном массиве.

  • val - массив типа array.
if Len(mylist) == 0 {
  ...
}

PubToID(hexkey string) int

Функция возвращает адрес кошелька по публичному ключу в шестнадцатеричной кодировке.

  • hexkey - публичный ключ в шестнадцатеричном виде.
var wallet int
wallet = PubToID("fa5e78.....34abd6")

Sha256(val string) string

Функция возвращает хэш SHA256 от указанной строки.

  • val - входящая строка, для которой нужно вычислить хэш Sha256.
var sha string
sha = Sha256("Test message")

Sprintf(pattern string, val ...) string

Функция формирует строку на основе указанного шаблона и параметров, можно использовать %d (число), %s (строка), %f (float), %v (для любых типов).

  • pattern - шаблон для формирования строки.
out = Sprintf("%s=%d", mypar, 6448)

Str(val int|float) string

Функция преобразует числовое значение типа int или float в строку.

  • val - целое или число с плавающей точкой.
myfloat = 5.678
val = Str(myfloat)

Table(tblname) string

Функция возвращает полное имя таблицы с числовым префиксом номера государства, в котором вызывается контракт и со знаком подчеркивания между префиксом и именем. Позволяет делать контракты независимыми от государства.

  • tblname - часть имени таблицы в базе данных после знака подчеркивания.
Println( Table("citizens")) // may be 1_citizens or 2_citizens etc.

Обновление элементов платформы

UpdateContract(name string, value string, conditions string)

Функция обновляет указанный контракт (не допускается изменение контракта через функции DBUpdate).

  • name - имя контракта;
  • value - текст контракта;
  • conditions - права доступа на изменение контракта.
UpdateContract("MyContract", source, "СonditionsContract($citizen)")

UpdateMenu(name string, value string, conditions string)

Функция обновляет указанное меню (не допускается изменение меню через функции DBUpdate).

  • name - имя обновляемого меню.
  • value - текст меню.
  • conditions - права доступа на изменение меню.
UpdateMenu("main_menu", mymenu, "СonditionsContract($citizen)")

UpdatePage(name string, value string, menu string, conditions string)

Функция обновляет указанную страницу (не допускается изменение страницы через функции DBUpdate).

  • name - имя обновляемой страницы;
  • value - текст страницы;
  • menu - имя привязанного к странице меню;
  • conditions - права доступа на изменение страницы.
UpdatePage("default_dashboard",mypage, "main_menu", "СonditionsContract($citizen)")

UpdateParam(name string, value string, conditions string)

Функция обновляет параметр государства в таблице state_parameters (не допускается изменение параметров через функции DBUpdate).

  • name - имя параметра;
  • value - значение параметра;
  • conditions - права доступа на изменение параметра.
UpdateParam("myparam", "new value", "СonditionsContract($citizen)")