Установка и использование платформы
Создание смарт-контрактов с помощью JS Contract SDK¶
В этом разделе описан JS Сontract SDK Toolkit – инструментарий для разработки, тестирования и развертывания смарт-контрактов в публичных блокчейн сетях Конфидент. Этот инструментарий позволяет быстро освоить экосистему Конфидент, используя такие языки программирования, как JavaScript или TypeScript, поскольку смарт-контракт разворачивается в Docker-контейнере.
Контракт можно развернуть в различных средах и сетях. Например, для локальной разработки смарт-контрактов и их тестирования вы можете локально развернуть свою сеть (создать локальную среду) на основе ноды в ознакомительном режиме (Sandbox) и развернуть контракты в этой сети.
Для развёртывания контракта в различных средах используйте инструмент WE Contract Command line interface (CLI).
Системные требования¶
Перед началом работы убедитесь, что на вашей машине установлено следующее ПО:
Docker
Node.js (LTS)
Быстрый старт¶
Для создания вашего нового проекта выполните в командной строке следующую команду:
С помощью npm npx
npx create-we-contract YourContractName -t path-to-contract -n package-name
или
npm create we-contract YourContractName -t path-to-contract -n package-name
или с помощью yarn
yarn create we-contract YourContractName -t path-to-contract -n package-name
Таким образом будет создан ваш первый смарт-контракт, готовый к разработке и внедрению в блокчейн Конфидент. Затем выполните следующую команду для инициализации зависимостей и начала разработки проекта:
npm i // or yarn
Конфигурация¶
Файл конфигурации используется для того, чтобы задать имя образа и имя контракта, которые будут отображаться в проводнике. Также в файле конфигурации можно задать тег образа (свойство name), который будет использоваться для отправки контракта в реестр.
Добавьте конфигурационный файл contract.config.js в корневую директорию вашего проекта для инициализации конфигурации контракта.
Если вы создали проект с помощью команды create-we-contract (как описано выше в разделе Быстрый старт), то конфигурация настраивается по умолчанию.
Конфигурация по умолчанию¶
Ниже приведён пример конфигурации по умолчанию:
module.exports = {
image: "my-contract",
name: 'My Contract Name',
version: '1.0.1',
networks: {
/// ...
}
}
Конфигурация сети¶
В разделе networks задайте конфигурацию для вашей сети:
module.exports = {
networks: {
"sandbox": {
seed: "#your secret seed phrase" // or get it from env process.env.MY_SECRET_SEED
// also you can provide
registry: 'localhost:5000',
nodeAddress: 'http://localhost:6862',
params: {
init: () => ({
paramName: 'paramValue'
})
}
}
}
}
seed– если вы хотите развернуть контракт в сети в ознакомительном режиме (Sandbox), укажите seed-фразу инициатора контракта;registry– если вы использовали определенный реестр Docker, укажите имя этого реестра;nodeAddress– укажите конкретный адрес ноды для развертывания.params.init– чтобы задать параметры инициализации, задайте функцию.
Осторожно
Не публикуйте свои секретные фразы в открытых хранилищах.
Развертывание контракта¶
Смарт-контракты выполняются, как только они развёрнуты в блокчейне. Для развертывания контракта используйте команду deploy в WE Contract CLI:
we-toolkit deploy -n testnet
где testnet – название сети, указанное в конфигурационном файле. Например, для развертывания контракта в сети в ознакомительном режиме (Sandbox), выполните следующую команду:
we-toolkit deploy -n sandbox
Набор инструментов для разработки смарт контрактов Contract SDK Toolkit¶
Основные понятия¶
Для создания класса контракта в Contract SDK Toolkit необходимо указать аннотации к методам. Следующие аннотации являются наиболее важными:
Contract– регистрация класса как контракта;Action– регистрация обработчика действия контракта;State– декоратор свойства класса для доступа к состоянию контракта;Param– декоратор, который отображает параметры транзакции на параметры действия класса контракта.
SDK предоставляет шаблоны контрактов, в которые вы можете добавить свою бизнес-логику:
@Contract
export class ExampleContract {
@State state: ContractState;
@Action
greeting(@Param('name') name: string) {
this.state.set('Greeting', `Hello, ${name}`);
}
}
Методы¶
Методы управления состоянием смарт контракта¶
Класс ContractState предоставляет методы для записи в состояние контракта. В документации ноды описаны доступные на данный момент типы данных в состоянии контракта. Contract SDK поддерживает все доступные на данный момент типы данных в состоянии контракта.
Запись¶
Самый простой способ записать состояние – использовать метод set. Этот метод автоматически приводит тип данных.
this.state.set('key', 'value')
Для явного приведения типов используйте методы, указанные ниже:
// for binary
this.state.setBinary('binary', Buffer.from('example', 'base64'));
// for boolean
this.state.setBool('boolean', true);
// for integer
this.state.setInt('integer', 102);
// for string
this.state.setString('string', 'example');
Считывание¶
Чтение состояния в настоящее время является асинхронным и зависит от конфигурации контракта.
@Contract
export class ExampleContract {
@State state: ContractState;
@Action
async exampleAction(@Param('name') name: string) {
const stateValue: string = await this.state.get('value', 'default-value');
}
}
Осторожно
У метода state.get нет информации о типе внутреннего состояния во время выполнения. Для явного приведения типов используйте методы getBinary, getString, getBool, getNum.
Write Actions¶
Ключевыми декораторами являются Action и Param.
Init Actions¶
Для описания действия создания контракта задайте параметру onInit декоратора действия значение true.
@Contract
export class ExampleContract {
@State state: ContractState;
@Action({onInit: true})
exampleAction(@Param('name') name: string) {
this.state.set('state-initial-value', 'initialized')
}
}
По умолчанию используется имя метода контракта action. Для того, чтобы задать другое имя действия, присвойте его параметру name декоратору.
@Contract
export class ExampleContract {
@State state: ContractState;
@Action({name: 'specificActionName'})
exampleAction() {
// Your code
}
}
Обновление версии контракта¶
Для обновления версии контракта используйте метод update. Метод обновляет последний развернутый контракт. Если ни один контракт не был развёрнут, метод ничего не обновляет.
we-cli update -n, --network <char>