Шаблон контракта
Давайте взглянем на высокий уровень, что доступно вам при разработке смарт-контракта с использованием ink!.
ink!
ink! — это eDSL для написания смарт-контрактов на основе WebAssembly на языке программирования Rust.
чернила! это просто стандартный Rust в четко определенном «формате контракта» со специализированными макросами атрибутов #[ink(...)]
. Эти макросы атрибутов сообщают ink! что представляют собой различные части вашего смарт-контракта Rust и, в конечном счете, позволяет использовать чернила! чтобы сделать всю магию, необходимую для создания байт-кодов Wasm, совместимых с Substrate!
Твоя очередь!
Мы собираемся начать новый проект для контракта Incrementer, который мы создадим в этой главе.
Итак, зайдите в свой рабочий каталог и запустите:
cargo contract new incrementer
Как и раньше, это создаст новую папку проекта с именем incrementer
, которую мы будем использовать до конца этой главы.
cd incrementer/
В файле lib.rs
замените исходный код контракта "Flipper" приведенным здесь кодом шаблона.
Быстро проверьте, что он компилируется и тривиальный тест проходит:
cargo +nightly test
Также убедитесь, что вы можете создать файл Wasm, запустив:
cargo +nightly contract build
Если все выглядит хорошо, то мы готовы приступить к программированию!
{% tabs %} {% tab title="✅Potential Solution" %} {% code title="lib.rs" %}
#![cfg_attr(not(feature = "std"), no_std)]
use ink_lang as ink;
#[ink::contract]
mod incrementer {
#[ink(storage)]
pub struct Incrementer {
// Storage Declaration
}
impl Incrementer {
#[ink(constructor)]
pub fn new(init_value: i32) -> Self {
// Contract Constructor
Self{}
}
#[ink(message)]
pub fn get(&self) {
// Contract Message
}
}
#[cfg(test)]
mod tests {
#[test]
fn default_works() {
// Test Your Contract
}
}
}
{% endcode %} {% endtab %} {% endtabs %}