ink! 开源项目教程
1. 项目的目录结构及介绍
ink! 是一个用于在 Substrate 区块链上编写智能合约的 Rust 编译器插件。项目的目录结构如下:
ink/
├── Cargo.toml
├── README.md
├── contracts/
│ ├── flipper/
│ ├── erc20/
│ └── ...
├── docker/
├── docs/
├── examples/
├── ffi/
├── integration-tests/
├── lib/
├── primitives/
├── rust-toolchain
├── scripts/
├── test-utils/
└── tools/
Cargo.toml
: 项目的依赖和元数据文件。README.md
: 项目介绍和使用说明。contracts/
: 包含多个示例智能合约,如flipper
和erc20
。docker/
: 包含用于构建和测试的 Docker 文件。docs/
: 项目文档。examples/
: 更多示例代码。ffi/
: 用于与其他语言交互的接口。integration-tests/
: 集成测试代码。lib/
: 核心库文件。primitives/
: 基础类型和工具。rust-toolchain
: 指定 Rust 工具链版本。scripts/
: 辅助脚本。test-utils/
: 测试工具。tools/
: 辅助工具。
2. 项目的启动文件介绍
ink! 项目的启动文件主要是 Cargo.toml
和各个智能合约的 lib.rs
文件。
Cargo.toml
: 定义了项目的依赖、构建脚本和其他元数据。例如:
[package]
name = "flipper"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
[dependencies]
ink_core = "0.1.0"
ink_lang = "0.1.0"
lib.rs
: 每个智能合约的核心逻辑文件。例如flipper
合约的lib.rs
文件:
#![cfg_attr(not(feature = "std"), no_std)]
use ink_lang as ink;
#[ink::contract]
mod flipper {
#[ink(storage)]
pub struct Flipper {
value: bool,
}
impl Flipper {
#[ink(constructor)]
pub fn new(init_value: bool) -> Self {
Self { value: init_value }
}
#[ink(message)]
pub fn flip(&mut self) {
self.value = !self.value;
}
#[ink(message)]
pub fn get(&self) -> bool {
self.value
}
}
}
3. 项目的配置文件介绍
ink! 项目的配置文件主要是 Cargo.toml
和 rust-toolchain
。
Cargo.toml
: 定义了项目的依赖、构建脚本和其他元数据。例如:
[package]
name = "flipper"
version = "0.1.0"
authors = ["Parity Technologies <admin@parity.io>"]
edition = "2018"
[dependencies]
ink_core = "0.1.0"
ink_lang = "0.1.0"
rust-toolchain
: 指定 Rust 工具链版本,确保项目在特定的 Rust 版本下编译。例如:
nightly-2021-01-01
这些配置文件确保项目在正确的环境和依赖下编译和运行。