From 14ee59ac235658ff8713bb5fc229c607c0f4e9c4 Mon Sep 17 00:00:00 2001 From: Alejandro Labourdette <66191544+AlejandroLabourdette@users.noreply.github.com> Date: Wed, 8 Mar 2023 08:18:14 -0500 Subject: [PATCH 1/5] create u256 from 2 felts (#975) --- warplib/integer.cairo | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 warplib/integer.cairo diff --git a/warplib/integer.cairo b/warplib/integer.cairo new file mode 100644 index 000000000..071a87cef --- /dev/null +++ b/warplib/integer.cairo @@ -0,0 +1,15 @@ +use integer::u128_try_from_felt; +use option::OptionTrait; + +fn u256_from_felts(low_felt: felt, high_felt: felt) -> u256 { + let low_u128: u128 = get_u128_try_from_felt_result(low_felt); + let high_u128: u128 = get_u128_try_from_felt_result(high_felt); + return u256{ low: low_u128, high: high_u128 }; +} + +fn get_u128_try_from_felt_result(value: felt) -> u128 { + let resp = u128_try_from_felt(value); + assert(resp.is_some(), 'Felts too large for u256'); + return resp.unwrap(); +} + From ad8f82b8a62165bf53bc8b425e79899efb6996c2 Mon Sep 17 00:00:00 2001 From: Rohit Ranjan Date: Fri, 10 Mar 2023 19:22:37 +0530 Subject: [PATCH 2/5] proposed sol: warplib import --- cairo1/darwin_arm64/corelib/src/lib.cairo | 3 +++ cairo1/darwin_arm64/corelib/src/warplib.cairo | 2 ++ cairo1/darwin_arm64/corelib/src/warplib/add.cairo | 6 ++++++ cairo1/linux_64/corelib/src/lib.cairo | 3 +++ cairo1/linux_64/corelib/src/warplib.cairo | 2 ++ cairo1/linux_64/corelib/src/warplib/add.cairo | 6 ++++++ test.cairo | 12 ++++++++++++ 7 files changed, 34 insertions(+) create mode 100644 cairo1/darwin_arm64/corelib/src/warplib.cairo create mode 100644 cairo1/darwin_arm64/corelib/src/warplib/add.cairo create mode 100644 cairo1/linux_64/corelib/src/warplib.cairo create mode 100644 cairo1/linux_64/corelib/src/warplib/add.cairo create mode 100644 test.cairo diff --git a/cairo1/darwin_arm64/corelib/src/lib.cairo b/cairo1/darwin_arm64/corelib/src/lib.cairo index 76ca0d430..d5cae1e1b 100644 --- a/cairo1/darwin_arm64/corelib/src/lib.cairo +++ b/cairo1/darwin_arm64/corelib/src/lib.cairo @@ -413,3 +413,6 @@ mod test; // Modules for testing only. mod testing; mod starknet_testing; + +mod warplib; +use warplib::warp_add; diff --git a/cairo1/darwin_arm64/corelib/src/warplib.cairo b/cairo1/darwin_arm64/corelib/src/warplib.cairo new file mode 100644 index 000000000..e6e6f70a8 --- /dev/null +++ b/cairo1/darwin_arm64/corelib/src/warplib.cairo @@ -0,0 +1,2 @@ +mod add; +use add::warp_add; diff --git a/cairo1/darwin_arm64/corelib/src/warplib/add.cairo b/cairo1/darwin_arm64/corelib/src/warplib/add.cairo new file mode 100644 index 000000000..eda5906c8 --- /dev/null +++ b/cairo1/darwin_arm64/corelib/src/warplib/add.cairo @@ -0,0 +1,6 @@ + +use integer::u128_from_felt; + +fn warp_add(num: u128, num2: felt) -> u128 { + num + u128_from_felt(num2) +} diff --git a/cairo1/linux_64/corelib/src/lib.cairo b/cairo1/linux_64/corelib/src/lib.cairo index 490feb384..77d8e0143 100644 --- a/cairo1/linux_64/corelib/src/lib.cairo +++ b/cairo1/linux_64/corelib/src/lib.cairo @@ -410,3 +410,6 @@ use zeroable::Zeroable; #[cfg(test)] mod test; + +mod warplib; +use warplib::warp_add; diff --git a/cairo1/linux_64/corelib/src/warplib.cairo b/cairo1/linux_64/corelib/src/warplib.cairo new file mode 100644 index 000000000..e6e6f70a8 --- /dev/null +++ b/cairo1/linux_64/corelib/src/warplib.cairo @@ -0,0 +1,2 @@ +mod add; +use add::warp_add; diff --git a/cairo1/linux_64/corelib/src/warplib/add.cairo b/cairo1/linux_64/corelib/src/warplib/add.cairo new file mode 100644 index 000000000..eda5906c8 --- /dev/null +++ b/cairo1/linux_64/corelib/src/warplib/add.cairo @@ -0,0 +1,6 @@ + +use integer::u128_from_felt; + +fn warp_add(num: u128, num2: felt) -> u128 { + num + u128_from_felt(num2) +} diff --git a/test.cairo b/test.cairo new file mode 100644 index 000000000..077bdaf77 --- /dev/null +++ b/test.cairo @@ -0,0 +1,12 @@ +#[contract] + +mod co{ + use integer::u128_to_felt; + use warplib::warp_add; + + #[view] + fn f(num: u128){ + let x = warp_add(num, 1); + } +} + From 2077f648fca62951dbff1e9dc15514069dffed7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 10 Mar 2023 16:16:03 +0100 Subject: [PATCH 3/5] Add warplib::integer to corelib --- cairo1/darwin_arm64/corelib/src/lib.cairo | 1 + .../corelib/src/warplib/integer.cairo | 15 +++++++++++++++ cairo1/linux_64/corelib/src/warplib/integer.cairo | 15 +++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 cairo1/darwin_arm64/corelib/src/warplib/integer.cairo create mode 100644 cairo1/linux_64/corelib/src/warplib/integer.cairo diff --git a/cairo1/darwin_arm64/corelib/src/lib.cairo b/cairo1/darwin_arm64/corelib/src/lib.cairo index d5cae1e1b..c21a4914b 100644 --- a/cairo1/darwin_arm64/corelib/src/lib.cairo +++ b/cairo1/darwin_arm64/corelib/src/lib.cairo @@ -416,3 +416,4 @@ mod starknet_testing; mod warplib; use warplib::warp_add; +use warplib::integer; diff --git a/cairo1/darwin_arm64/corelib/src/warplib/integer.cairo b/cairo1/darwin_arm64/corelib/src/warplib/integer.cairo new file mode 100644 index 000000000..071a87cef --- /dev/null +++ b/cairo1/darwin_arm64/corelib/src/warplib/integer.cairo @@ -0,0 +1,15 @@ +use integer::u128_try_from_felt; +use option::OptionTrait; + +fn u256_from_felts(low_felt: felt, high_felt: felt) -> u256 { + let low_u128: u128 = get_u128_try_from_felt_result(low_felt); + let high_u128: u128 = get_u128_try_from_felt_result(high_felt); + return u256{ low: low_u128, high: high_u128 }; +} + +fn get_u128_try_from_felt_result(value: felt) -> u128 { + let resp = u128_try_from_felt(value); + assert(resp.is_some(), 'Felts too large for u256'); + return resp.unwrap(); +} + diff --git a/cairo1/linux_64/corelib/src/warplib/integer.cairo b/cairo1/linux_64/corelib/src/warplib/integer.cairo new file mode 100644 index 000000000..071a87cef --- /dev/null +++ b/cairo1/linux_64/corelib/src/warplib/integer.cairo @@ -0,0 +1,15 @@ +use integer::u128_try_from_felt; +use option::OptionTrait; + +fn u256_from_felts(low_felt: felt, high_felt: felt) -> u256 { + let low_u128: u128 = get_u128_try_from_felt_result(low_felt); + let high_u128: u128 = get_u128_try_from_felt_result(high_felt); + return u256{ low: low_u128, high: high_u128 }; +} + +fn get_u128_try_from_felt_result(value: felt) -> u128 { + let resp = u128_try_from_felt(value); + assert(resp.is_some(), 'Felts too large for u256'); + return resp.unwrap(); +} + From 15f14715d889825d3df13d701cf81c76ee0a6d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 10 Mar 2023 16:18:06 +0100 Subject: [PATCH 4/5] Add warplib::integer to x64 --- cairo1/linux_64/corelib/src/lib.cairo | 1 + 1 file changed, 1 insertion(+) diff --git a/cairo1/linux_64/corelib/src/lib.cairo b/cairo1/linux_64/corelib/src/lib.cairo index 77d8e0143..71aeb1e57 100644 --- a/cairo1/linux_64/corelib/src/lib.cairo +++ b/cairo1/linux_64/corelib/src/lib.cairo @@ -413,3 +413,4 @@ mod test; mod warplib; use warplib::warp_add; +use warplib::integer; From 2d9f595470c47b1407c808d34f8c73354ed10e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Piwo=C5=84ski?= Date: Fri, 10 Mar 2023 16:21:01 +0100 Subject: [PATCH 5/5] Add integer functions to warplib.cairo --- cairo1/darwin_arm64/corelib/src/warplib.cairo | 2 ++ cairo1/linux_64/corelib/src/warplib.cairo | 2 ++ 2 files changed, 4 insertions(+) diff --git a/cairo1/darwin_arm64/corelib/src/warplib.cairo b/cairo1/darwin_arm64/corelib/src/warplib.cairo index e6e6f70a8..053e23ad0 100644 --- a/cairo1/darwin_arm64/corelib/src/warplib.cairo +++ b/cairo1/darwin_arm64/corelib/src/warplib.cairo @@ -1,2 +1,4 @@ mod add; use add::warp_add; +use integer::get_u128_try_from_felt_result; +use integer::u256_from_felts; diff --git a/cairo1/linux_64/corelib/src/warplib.cairo b/cairo1/linux_64/corelib/src/warplib.cairo index e6e6f70a8..053e23ad0 100644 --- a/cairo1/linux_64/corelib/src/warplib.cairo +++ b/cairo1/linux_64/corelib/src/warplib.cairo @@ -1,2 +1,4 @@ mod add; use add::warp_add; +use integer::get_u128_try_from_felt_result; +use integer::u256_from_felts;