Getting Started
0. Template contract
First of all, we need an ink! contract, flipper here.
cargo contract new flipper
1. add build.rs
to our contract
// flipper/build.rs use std::process::Command; fn main() { println!("cargo:rerun-if-changed=src/lib.rs"); Command::new("cargo").args(&["contract", "build"]); }
2. add inkpad as dev-dependencies
[dev-dependencies]
inkpad = "^0"
3. write tests with inkpad
#![allow(unused)] fn main() { // /tests/flipper.rs use inkpad_executor::{Trap, TrapCode}; use inkpad_ri::Instance; use inkpad_runtime::Runtime; use parity_scale_codec::Encode; #[test] fn test_flipper() { let mut rt = Runtime::contract( include_bytes!("../contracts/flipper.contract"), Some(Instance), ) .expect("Create runtime failed"); rt.deploy("default", vec![], None).expect("Deploy failed"); assert_eq!(rt.call("get", vec![], None), Ok(Some(vec![0]))); rt.deploy("new", vec![true.encode()], None) .expect("Deploy failed"); assert_eq!(rt.call("get", vec![], None), Ok(Some(vec![1]))); rt.call("flip", vec![], None).expect("Call contract failed"); assert_eq!(rt.call("get", vec![], None), Ok(Some(vec![0]))); } }
4. run tests
# flipper/
cargo test