22 changed files with 1518 additions and 8 deletions
@ -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 |
@ -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. |
@ -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,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);
|
||||
} |
@ -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,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] |
Binary file not shown.
@ -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); |
||||
|
||||
} |
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 = [] |
@ -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 |
Loading…
Reference in new issue