Refreshing rust knowledge
parent
1d01d94882
commit
68ed942727
|
@ -1,8 +0,0 @@
|
|||
|
||||
# Building for example a lib such as "rust-syslog" - This needs exec privilege on the target partition.
|
||||
cargo build
|
||||
|
||||
# Add external !built! crate
|
||||
rustc -L /home/extern/path asd.rs
|
||||
|
||||
rustc asd.rs --extern /home/path/lib
|
|
@ -0,0 +1,4 @@
|
|||
Similar as Python notes, these are practical examples that help reminding logic, optimization, syntax and security related topics.
|
||||
|
||||
General code folder: consist of basic code examples of standard rust.
|
||||
Smart contract code folder: consist of Rust based smart contract code.
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
# Building for example a lib such as "rust-syslog" - This needs exec privilege on the source partition.
|
||||
cargo build
|
||||
|
||||
# Add external !built! crate
|
||||
rustc -L /home/extern/path asd.rs
|
||||
|
||||
rustc asd.rs --extern /home/path/lib
|
||||
|
||||
# Install cargo audit
|
||||
cargo install cargo-audit
|
||||
|
||||
# Clippy warnings check
|
||||
rustup update
|
||||
rustup component add clippy
|
||||
cargo clippy
|
||||
# cargo clippy --fix
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
fn main() {
|
||||
|
||||
fn answer_to_life_the_universe_and_everything() -> i32 {
|
||||
return 42;
|
||||
}
|
||||
|
||||
#[warn(overflowing_literals)]
|
||||
fn another_function(x: i32) {
|
||||
println!("The value of x is: {}", x);
|
||||
}
|
||||
|
||||
answer_to_life_the_universe_and_everything();
|
||||
|
||||
another_function(6);
|
||||
|
||||
//// On x86 (32-bit, 4-byte):
|
||||
// - 0x00000000 -> 0
|
||||
// - 0xffffffff -> -1
|
||||
// - 0x7fffffff -> 2147483647 (INT_MAX)
|
||||
// - 0x80000000 -> -2147483648 (INT_MIN)
|
||||
|
||||
// 0x00000001 + 0x00000002 = 0x00000003 ( 1 + 2 = 3)
|
||||
// 0xffffffff + 0x00000002 = 0x00000001 (-1 + 2 = 1)
|
||||
// 0xffffffff + 0xfffffffe = 0xfffffffd (-1 +-2 =-3)
|
||||
|
||||
//another_function(2147483648);
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
// clap = "3.0.0-beta.5"
|
||||
extern crate clap;
|
||||
|
||||
use clap::{Arg, App};
|
||||
|
||||
fn main() {
|
||||
let app = App::new("hello-clap");
|
||||
let iternum = Arg::with_name("n")
|
||||
.long("num")
|
||||
.takes_value(true)
|
||||
.help("You need to specify the max number of iterations.")
|
||||
.required(true);
|
||||
|
||||
let funcatk = Arg::with_name("f")
|
||||
.long("func")
|
||||
.takes_value(true)
|
||||
.help("You need to specify the function to attack.")
|
||||
.required(true);
|
||||
|
||||
let contractf = Arg::with_name("c")
|
||||
.long("contract")
|
||||
.takes_value(true)
|
||||
.help("You need to specify the contract file's name.")
|
||||
.required(true);
|
||||
|
||||
let app = app.arg(iternum);
|
||||
let app = app.arg(funcatk);
|
||||
let app = app.arg(contractf);
|
||||
|
||||
let matches = app.get_matches();
|
||||
|
||||
let iternumout = matches.value_of("iternum")
|
||||
.expect("Required option.");
|
||||
let funcatkout = matches.value_of("funcatk")
|
||||
.expect("Required option.");
|
||||
let contractfout = matches.value_of("contractf")
|
||||
.expect("Required option.");
|
||||
|
||||
println!("Your options are: {} {} {}!", iternumout, funcatkout, contractfout);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "Rust_Examples_and_Notes"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
Binary file not shown.
|
@ -0,0 +1,99 @@
|
|||
fn main() {
|
||||
|
||||
//// 000_println.rs
|
||||
println!("Printed text.");
|
||||
print!("No new line.");
|
||||
|
||||
|
||||
//// 010_add_distract_math_literal_operator.rs
|
||||
//https://doc.rust-lang.org/rust-by-example/primitives/literals.html
|
||||
println!("1 + 2 = {}", 1u32 + 2);
|
||||
println!("1 + 2 = {}", 32 + 2);
|
||||
|
||||
println!("1 - 2 = {}", 1i32 - 2);
|
||||
//println!("1 - 2 = {}", 1u32 - 2); // panic because of overflow, program halts !!
|
||||
|
||||
// Short-circuiting boolean logic
|
||||
println!("true AND false is {}", true && false);
|
||||
println!("true OR false is {}", true || false);
|
||||
println!("NOT true is {}", !true);
|
||||
|
||||
// Bitwise operations
|
||||
println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101);
|
||||
println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101);
|
||||
println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101);
|
||||
println!("1 << 5 is {}", 1u32 << 5);
|
||||
println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2);
|
||||
|
||||
// Use underscores to improve readability!
|
||||
println!("One million is written as {}", 1_000_000u32);
|
||||
|
||||
reverse((1,true));
|
||||
tuplez();
|
||||
|
||||
}
|
||||
|
||||
|
||||
//// 020_tuples.rs
|
||||
// https://doc.rust-lang.org/rust-by-example/primitives/tuples.html
|
||||
|
||||
// Tuples can be used as function arguments and as return values
|
||||
fn reverse(pair: (i32, bool)) -> (bool, i32) {
|
||||
// `let` can be used to bind the members of a tuple to variables
|
||||
let (integer, boolean) = pair;
|
||||
|
||||
(boolean, integer)
|
||||
}
|
||||
|
||||
// The following struct is for the activity.
|
||||
#[derive(Debug)]
|
||||
struct Matrix(f32, f32, f32, f32);
|
||||
|
||||
fn tuplez() {
|
||||
|
||||
// ---------- //
|
||||
|
||||
// A tuple with a bunch of different types
|
||||
let long_tuple = (1u8, 2u16, 3u32, 4u64,
|
||||
-1i8, -2i16, -3i32, -4i64,
|
||||
0.1f32, 0.2f64,
|
||||
'a', true);
|
||||
|
||||
// Values can be extracted from the tuple using tuple indexing
|
||||
println!("long tuple first value: {}", long_tuple.0);
|
||||
println!("long tuple second value: {}", long_tuple.1);
|
||||
|
||||
// ---------- //
|
||||
|
||||
// Tuples can be tuple members
|
||||
let tuple_of_tuples = ((1u8, 2u16, 2u32), (4u64, -1i8), -2i16);
|
||||
|
||||
// Tuples are printable
|
||||
println!("tuple of tuples: {:?}", tuple_of_tuples); // !! {:?} is useful also for debugging
|
||||
|
||||
// But long Tuples cannot be printed !!
|
||||
// let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
|
||||
// println!("too long tuple: {:?}", too_long_tuple);
|
||||
// TODO ^ Uncomment the above 2 lines to see the compiler error
|
||||
|
||||
let pair = (1, true);
|
||||
println!("pair is {:?}", pair);
|
||||
|
||||
println!("the reversed pair is {:?}", reverse(pair));
|
||||
|
||||
// To create one element tuples, the comma is required to tell them apart
|
||||
// from a literal surrounded by parentheses
|
||||
println!("one element tuple: {:?}", (5u32,));
|
||||
println!("just an integer: {:?}", (5u32));
|
||||
|
||||
//tuples can be destructured to create bindings
|
||||
let tuple = (1, "hello", 4.5, true);
|
||||
|
||||
let (a, b, c, d) = tuple;
|
||||
println!("{:?}, {:?}, {:?}, {:?}", a, b, c, d);
|
||||
|
||||
let matrix = Matrix(1.1, 1.2, 2.1, 2.2);
|
||||
println!("{:?}", matrix);
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,40 @@
|
|||
[package]
|
||||
name = "flipper"
|
||||
version = "0.1.0"
|
||||
authors = ["Test user and mail"]
|
||||
edition = "2018"
|
||||
resolver = "2"
|
||||
|
||||
[dependencies]
|
||||
ink_primitives = { version = "3.0.0-rc7", default-features = false }
|
||||
ink_metadata = { version = "3.0.0-rc7", default-features = false, features = ["derive"], optional = true }
|
||||
ink_env = { version = "3.0.0-rc7", default-features = false }
|
||||
ink_storage = { version = "3.0.0-rc7", default-features = false }
|
||||
ink_lang = { version = "3.0.0-rc7", default-features = false }
|
||||
|
||||
scale = { package = "parity-scale-codec", version = "2.1", default-features = false, features = ["derive"] }
|
||||
scale-info = { version = "1.0.0", default-features = false, features = ["derive"], optional = true }
|
||||
|
||||
[lib]
|
||||
name = "flipper"
|
||||
path = "lib.rs"
|
||||
crate-type = [
|
||||
# Used for normal contract Wasm blobs.
|
||||
"cdylib",
|
||||
]
|
||||
|
||||
# Needed until https://github.com/paritytech/ink/issues/364 is resolved.
|
||||
[profile.release]
|
||||
overflow-checks = false
|
||||
|
||||
[features]
|
||||
default = ["std"]
|
||||
std = [
|
||||
"ink_metadata/std",
|
||||
"ink_env/std",
|
||||
"ink_storage/std",
|
||||
"ink_primitives/std",
|
||||
"scale/std",
|
||||
"scale-info/std",
|
||||
]
|
||||
ink-as-dependency = []
|
|
@ -0,0 +1,10 @@
|
|||
|
||||
# https://docs.substrate.io/tutorials/v3/ink-workshop/pt1/#running-a-substrate-smart-contracts-node
|
||||
# https://github.com/paritytech/ink/blob/v3.0.0-rc5/examples/flipper/lib.rs
|
||||
|
||||
> cargo install cargo-contract --vers ^0.16 --force --locked
|
||||
> cargo contract new flipper
|
||||
|
||||
> cd Rust_Examples_and_Notes/smart_contract_code
|
||||
> cargo +nightly test
|
||||
> cargo +nightly contract build
|
Loading…
Reference in New Issue