Browse Source

Refreshing rust knowledge

master
six 4 months ago
parent
commit
68ed942727
  1. 8
      0000_notes.txt
  2. 4
      README.me
  3. 18
      general_code/0000_notes.txt
  4. 0
      general_code/000_println.rs
  5. 0
      general_code/010_add_distract_math_literal_operator.rs
  6. 0
      general_code/020_tuples.rs
  7. 0
      general_code/021_tuples_simple.rs
  8. 27
      general_code/031_functions.rs
  9. 40
      general_code/050_cli_clap.rs
  10. 0
      general_code/100_tcp_listen_thread_answer.rs
  11. 8
      general_code/Cargo.toml
  12. 0
      general_code/compiled/000_println
  13. 0
      general_code/compiled/010_add_distract_math_literal_operator
  14. 0
      general_code/compiled/020_tuples
  15. 0
      general_code/compiled/021_tuples_simple
  16. BIN
      general_code/compiled/031_functions
  17. 0
      general_code/compiled/100_tcp_listen_thread_answer
  18. 99
      general_code/src/main.rs
  19. 1272
      smart_contract_code/Cargo.lock
  20. 40
      smart_contract_code/Cargo.toml
  21. 10
      smart_contract_code/info.md
  22. 0
      smart_contract_code/lib.rs

8
0000_notes.txt

@ -1,8 +0,0 @@ @@ -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

4
README.me

@ -0,0 +1,4 @@ @@ -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.

18
general_code/0000_notes.txt

@ -0,0 +1,18 @@ @@ -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
000_println.rs → general_code/000_println.rs

0
010_add_distract_math_literal_operator.rs → general_code/010_add_distract_math_literal_operator.rs

0
020_tuples.rs → general_code/020_tuples.rs

0
021_tuples_simple.rs → general_code/021_tuples_simple.rs

27
general_code/031_functions.rs

@ -0,0 +1,27 @@ @@ -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);
}

40
general_code/050_cli_clap.rs

@ -0,0 +1,40 @@ @@ -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
100_tcp_listen_thread_answer.rs → general_code/100_tcp_listen_thread_answer.rs

8
general_code/Cargo.toml

@ -0,0 +1,8 @@ @@ -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]

0
compiled/000_println → general_code/compiled/000_println

0
compiled/010_add_distract_math_literal_operator → general_code/compiled/010_add_distract_math_literal_operator

0
compiled/020_tuples → general_code/compiled/020_tuples

0
compiled/021_tuples_simple → general_code/compiled/021_tuples_simple

BIN
general_code/compiled/031_functions

Binary file not shown.

0
compiled/100_tcp_listen_thread_answer → general_code/compiled/100_tcp_listen_thread_answer

99
general_code/src/main.rs

@ -0,0 +1,99 @@ @@ -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);
}

1272
smart_contract_code/Cargo.lock generated

File diff suppressed because it is too large Load Diff

40
smart_contract_code/Cargo.toml

@ -0,0 +1,40 @@ @@ -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 = []

10
smart_contract_code/info.md

@ -0,0 +1,10 @@ @@ -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

0
smart_contract_code/lib.rs

Loading…
Cancel
Save