База данных

aync app.sdb.load(модель, поля, индексы)

  • model : название модели
  • fields : поля загружаются в оперативную память
  • indices: index array, when the index is single field, the element is string; when the index is multifield, the element is string array

Возвращает: нет. При возникновении ошибки генерируется исключение, загружаются данные указанной модели в ОЗУ и строится индекс, что может повысить эффективность запросов и обновления состояния. Мы предлагаем использовать этот интерфейс, когда модель данных нуждается в частых обновлениях и запросах. Например, встроенные балансы счетов и самовозрастающий идентификатор системы.

Пример:

await app.sdb.load('Balance', app.model.Balance.fields(), [['address', 'currency']])
await app.sdb.load('Variable', ['key', 'value'], ['key'])

app.sdb.get(модель, условие)

  • model : название модели
  • cond : условие запроса

Возвращает: элемент данных, включающий указанное поле загрузки. При запросе данных в ОЗУ в соответствии с указанным условием будет выдано исключение, если эта модель не загружена в ОЗУ или условие запроса содержит поля, не имеющие индекса.

Пример:

app.sdb.get('Variable', { key: 'foo' })
/* output:
{
key: 'foo',
value: 'bar'
}
*/
let balance = app.sdb.get('Balance', { address: 'foo', currency: 'XAS' })
/* output:
{
address: 'foo',
currency: 'XAS',
balance: '1000000'
}
*/

app.sdb.keys(модель)

  • model : название модели

Возвращает: все поля индекса одной модели данных.

Пример:

let keys = app.sdb.keys('Variable')
for (let i of keys) {
console.log(i)
}
/* output:
foo
foo1
foo2
*/

app.sdb.entries(модель)

  • model : название модели

Возвращает: весь элемент кэша одной модели данных.

Пример:

let entries = app.sdb.entries('Variable')
for (let [key, value] of entries) {
console.log(key, value)
}
/* output:
foo bar
foo1 bar1
foo2 bar2
*/

ap.sdb.lock(ключ)

  • key

Возвращает: нет. Действительно, ключ заблокирован в интервале блока. Не допускается повторная блокировка ключа в жизненном цикле блока. Он выдаст исключение, если ключ будет заблокирован во второй раз. Эта функция в первую очередь предназначена для решения проблемы зависимости от неподтвержденных данных. Например, в договоре для аккаунта устанавливается никнейм. Прежде чем вызовы по контракту будут подтверждены, нам необходимо снова запретить вызовы. В этом случае мы можем использовать функцию блокировки.

Пример:

app.sdb.lock('AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85@nickname'

app.sdb.create(модель, значения)

  • model : название модели
  • values : Элемент данных, который необходимо создать

Возвращает: нет. создавая элемент данных, он будет обновлять кеш в режиме реального времени, если эта модель имеет кеш. После подтверждения этого блока он запишет элемент данных в базу данных на диск.

Пример:

app.sdb.create('Article', {
title: 'This is an article title',
content: 'article contents',
author: 'qingfeng',
tag: 'Science'
})

app.sdb.replace (модель, значения)

  • model : название модели
  • values : Элемент данных, который необходимо создать или обновить.

Возвращает: нет. создание или обновление элемента данных. Этот элемент данных будет создан, если его нет в базе данных, в противном случае он будет обновлен. Модель и значения должны содержать первичный ключ.

Пример:

app.sdb.replace('Account', {
address: 'AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85',
nickname: 'Nakamoto'
})

app.sdb.update(модель, модификатор, условие)

· модель : название модели

· модификатор: элемент(ы) данных для обновления

· cond : условие обновления

Нет возвращаемого значения, обновить элемент(ы) данных модели в соответствии с указанным условием

Пример:

app.sdb.update('Account', { nickname: 'Nakamoto' }, { nickname: 'Satoshi' })

app.sdb.increment (модель, модификатор, условие)

· модель : название модели

· модификатор: элемент(ы) данных для обновления

· cond : условие обновления

Постепенно обновлять элемент(ы) типа данных модели integer в соответствии с указанным условием.

Пример:

app.sdb.increment('Article', { votes: -10 }, { id: '10000' })
app.sdb.increment('Article', { comments: 1 }, { id: '10000' })

app.sdb.del(модель, состояние)

· модель : название модели

· конд : удалить конд

Нет возвращаемого значения. Удалить элемент данных модели в соответствии с указанным условием, в настоящее время действие удаления нижнего уровня заключается в том, чтобы пометить элемент данных как «удаленный». Интерфейс запроса по умолчанию будет игнорировать эти отмеченные данные, однако нестандартный интерфейс запроса или протокол по-прежнему может получить доступ к этим данным.

Пример:

app.sdb.del('Article', { id: '100001' })

Баланс

app.balances.get(адрес, валюта)

· адрес: адрес счета

· валюта : валюта

Получить баланс указанной валюты указанного адреса счета

Пример:

app.balances.get('AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85', 'XAS')
/* output:
{
address: 'AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85',
currency: 'XAS',
balance: '10000000'
}
*/

app.balances.increase (адрес, валюта, сумма)

· адрес: адрес счета

· валюта : валюта

· сумма: сумма зависимости

Нет возвращаемого значения. Увеличить баланс указанной валюты указанного счета

Пример:

app.balances.increase('AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85', 'XAS', '100000')

app.balances.decrease(адрес, валюта, сумма)

· адрес: адрес счета

· валюта : валюта

· сумма:сумма уменьшения

Нет возвращаемого значения. Уменьшить баланс указанной валюты указанного счета

Пример:

app.balances.decrease('AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85', 'XAS', '100000')

app.balances.transfer(валюта, сумма, от, до)

· валюта :валюта

· сумма: сумма к переводу

· от : исходный адрес

· до : адрес назначения

Нет возвращаемого значения. Перенос актива с адреса источника на адрес назначения

Пример:

app.balances.transfer('XAS', '100000', 'AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85', 'A4MFPoF3c9vCzZ3GGf9sNQ3rDy2q8aXuVF')

модель данных

app.model[имя]

· имя : название модели

Экземпляр модели возврата, в основном используемый для запроса подтвержденных данных

поля()

Вернуть все сегменты данных указанной модели

количество(условие)

· условие

Возвращает общее количество элементов данных, соответствующих указанному условию

Пример:

app.model.Block.count({ height: { $lt: 100 } })
/* output:
99
/*

существует (условно)

· найти условие

Возвращает логическое значение, представляет, соответствуют ли элементы данных условию существования

Пример:

app.model.Transaction.exists({ id: '9a5ec0669c79b9f5a1d5a4dbb2c200bc28c9ea829dbff71f41cbb2ad5a7d9b01' })
/* output:
false
/*
app.model.Account.exists({ nickname: 'Nakamoto' })
/* output:
true
*/

findOne(параметры)

option - это объект, включающий следующие элементы

· состояние :найти условие

· поля :поля возврата

Найти данные, соответствующие указанной опции.

Пример:

app.model.Account.findOne({ nickname: 'Nakamoto' })
/* output:
{
address: 'AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85',
nickname: 'Nakamoto',
...other values
}
*/

найтиВсе(параметры)

option — это объект, включающий следующие элементы:

· условие: найти условие

· поля :поля возврата

· сортировать: сортировать

· limit : максимальное количество возвратов

· смещение :смещение

Найти все данные, соответствующие указанному параметру

Пример:

app.model.Transfer.findAll({ senderId: 'AC3pinmvz9qX9cj6c7VrGigq7bpPxVJq85'})
/* output:
[
{
tid: "50e062f25946d220b924cb5ec6e52e260e44c9417d9f3c8ea041b704e06895f7",
senderId: "AFnwUuET2XddPtqpFb2ns78CQEqc7KZ6vD",
recipientId: "asdasdasd",
currency: "CCTime.XCT",
amount: "100000000",
t_timestamp: 38660145,
t_type: 3,
t_height: 93953
},
{
tid: "f15ce92add809b4a132936d514dce7fa7bdc15e850e7c026a001625b48595af3",
senderId: "AFnwUuET2XddPtqpFb2ns78CQEqc7KZ6vD",
recipientId: "asdasd",
currency: "CCTime.XCT",
amount: "100000000",
t_timestamp: 38660096,
t_type: 3,
t_height: 93948
}
]
*/

Маршрут

· дорожка

· Функция обработчика HTTP-запросов, тип async

app.route.get(путь, обработчик)

зарегистрировать функцию обработчика http-запроса типа get

app.route.post(путь, обработчик)

зарегистрировать функцию обработчика http-запроса типа post

app.route.put(путь, обработчик)

зарегистрировать функцию обработчика http-запроса типа put

комиссия

app.feePool.add(валюта, сумма)

· валюта

· количество

Нет возвращаемого значения, добавьте актив в FeePool (добавьте ко всем делегатам поровну в конце каждого раунда)

Пример:

app.feelPool.add('XAS', '10000000')

идентификатор автоматического увеличения

app.autoID.get(имя)

· имя: ID имя

Строка возврата. Получить текущий максимальный идентификатор имени

app.autoID.increment(имя)

· Идентификатор имени: Идентификационное имя

Строка возврата. Добавьте 1 к указанному идентификатору и верните добавленное значение в виде строки. То же, что и манипулирование атомами ++1, может применяться к огромному количеству

Пример:

const AID = 'article_id'
app.autoID.get(AID) === '0'
app.autoID.increment(AID) === '1'
app.autoID.get(AID) === '1'

журнал

app.logger.setLevel(уровень)

app.logger.log()

app.logger.trace()

app.logger.debug()

app.logger.info()

app.logger.warn()

app.logger.error()

Пример:

app.logger.setLevel('debug')
app.logger.setLevel('info')
logger.log('hello');
logger.trace('hello', 'world');
logger.debug('hello %s',  'world', 123);
logger.info('hello %s %d',  'world', 123, {foo:'bar'});
logger.warn('hello %s %d %j', 'world', 123, {foo:'bar'});
logger.error('hello %s %d %j', 'world', 123, {foo:'bar'}, [1, 2, 3, 4], Object);

Инструменты

app.validate(тип, значение)

· тип: тип данных для проверки

· value : значение данных для проверки

Чтобы проверить, верны ли данные, выдайте исключение, если они недействительны.

Пример:

app.validate('amount', '10000') // pase
app.validate('amount', 10000) // throws
app.validate('amount', 'abc') // throws
app.validate('amount', '1e10') // throws

app.registerContract(тип, имя)

· type : тип контракта или идентификатор

· name : имя строки контракта

Нет возврата, тип регистрации для контракта, незарегистрированный контракт не может быть вызван извне

Пример:

app.registerContract(1001, 'cctime.postArticle')

app.getContractName(type)

· тип: тип контракта или идентификатор

Получить имя контракта по типу

Пример:

app.getContractName(1001) === 'cctime.postArticle'

app.registerFee(тип, мин., валюта)

· type : тип контракта или идентификатор

· мин : минимальная плата

· валюта

Зарегистрируйте минимальную плату за контракт, неосновной актив может взимать плату с другого назначенного актива в качестве комиссионного сбора в валюте параметра.

Мин - минимальная комиссия. Плата не может быть меньше min при вызове контракта, избыточная часть будет автоматически помещена в Feepool.

Пример:

app.registerFee(1001, '100000', 'XAS')

app.getFee(type)

· тип: тип контакта или идентификатор

Получить настройку комиссии по указанному контракту

Пример:

app.getFee(1001)
/* output:
{
min: '100000',
currency: 'XAS'
}
*/

app.setDefaultFee(мин., валюта)

· мин :минимальная плата

· валюта

Установить комиссию по умолчанию для всех контрактов системы

Пример:

app.setDefaultFee('10000', 'XAS')

app.getRealTime(epochTime)

· epochTime : время от блока эпохи

Возвращает полную метку реального времени: значение смещения времени, добавленное к времени блока эпохи, единица измерения — миллисекунды.

Хранящаяся метка времени нижнего уровня и возвращаемая метка времени верхнего уровня являются значением смещения (не в реальном времени) и могут быть преобразованы в метку реального времени с помощью этой функции.

Пример:

app.getRealTime(4353634)

app.registerHook

// подлежит уточнению

app.custom[]

Пространство имен приложения. Может использоваться для сохранения пользовательских глобальных переменных приложения, в основном для отделения от глобальных переменных системного уровня.