База данных
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[]
Пространство имен приложения. Может использоваться для сохранения пользовательских глобальных переменных приложения, в основном для отделения от глобальных переменных системного уровня.