Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add CI #52

Merged
merged 1 commit into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: ci

on:
push:
branches:
- main
pull_request:

env:
CARGO_TERM_COLOR: always
RUST_VERSION: nightly-2023-09-26

jobs:
test:
runs-on: ubuntu-latest
container:
image: ghcr.io/dojoengine/dojo-dev:5d61184
steps:
- uses: actions/checkout@v3
- uses: asdf-vm/actions/install@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
components: llvm-tools-preview
- uses: taiki-e/install-action@cargo-llvm-cov
- run: cargo llvm-cov --all-features --lcov --output-path lcov.info
- uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: lcov.info

ensure-wasm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
target: wasm32-unknown-unknown
- run: cargo build -r --target wasm32-unknown-unknown -p account-sdk

cairo-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: asdf-vm/actions/install@v3
- run: scarb fmt --check
- run: snforge test

clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: asdf-vm/actions/install@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
components: clippy
- run: cargo clippy --all-targets --all-features

fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
components: rustfmt
- uses: actions-rust-lang/rustfmt@v1
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@ Cargo.lock

# Logs
**/log/

lcov.info
2 changes: 0 additions & 2 deletions .tool-versions
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
scarb 2.5.4
starknet-foundry 0.18.0
python 3.9.18
dojo 0.4.4
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ cargo build -p account-sdk --target wasm32-unknown-unknown --release

Note, that to run the tests you first have to [compile](#compiling-the-cairo-code) (to sierra and casm) the contract in the `cartidge_account` folder.

StarkNet Foundry tests:
Starknet Foundry tests:

```bash
snforge test -p cartridge_account
Expand Down
6 changes: 3 additions & 3 deletions Scarb.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ edition = "2023_10"
version = "0.1.0"

[workspace.dependencies]
alexandria_data_structures = { git = "https://github.com/keep-starknet-strange/alexandria", tag="cairo-v2.5.4" }
alexandria_encoding = { git = "https://github.com/keep-starknet-strange/alexandria", tag="cairo-v2.5.4" }
alexandria_merkle_tree = { git = "https://github.com/keep-starknet-strange/alexandria", tag="cairo-v2.5.4" }
alexandria_data_structures = { git = "https://github.com/keep-starknet-strange/alexandria", tag = "cairo-v2.5.4" }
alexandria_encoding = { git = "https://github.com/keep-starknet-strange/alexandria", tag = "cairo-v2.5.4" }
alexandria_merkle_tree = { git = "https://github.com/keep-starknet-strange/alexandria", tag = "cairo-v2.5.4" }
openzeppelin = { git = "https://github.com/OpenZeppelin/cairo-contracts", tag = "v0.9.0" }
snforge_std = { git = "https://github.com/foundry-rs/starknet-foundry", tag = "v0.18.0" }
starknet = "2.5.3"
Expand Down
3 changes: 1 addition & 2 deletions crates/account_sdk/src/felt_ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -395,8 +395,7 @@ mod tests {
let serialized = vec![val.a, val.i.into(), val.x.into()];
let seq = (0..100).map(|_| val.clone()).collect::<Vec<_>>();
let mut result = (0..100)
.map(|_| serialized.clone())
.flatten()
.flat_map(|_| serialized.clone())
.collect::<Vec<_>>();
result.insert(0, seq.len().into());
assert_eq!(to_felts(&seq), result);
Expand Down
21 changes: 10 additions & 11 deletions crates/account_sdk/src/tests/deployment_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ pub async fn create_account<'a>(
SigningKey,
) {
let provider = *from.provider();
let class_hash = declare(provider, &from).await;
let class_hash = declare(provider, from).await;
let private_key = SigningKey::from_random();
let deployed_address = deploy(
provider,
&from,
from,
private_key.verifying_key().scalar(),
class_hash,
)
Expand Down Expand Up @@ -53,13 +53,12 @@ pub async fn declare(
client: &JsonRpcClient<HttpTransport>,
account: &SingleOwnerAccount<&JsonRpcClient<HttpTransport>, LocalWallet>,
) -> FieldElement {
let DeclareTransactionResult { class_hash, .. } =
AccountDeclaration::cartridge_account(&client)
.declare(&account)
.await
.unwrap()
.wait_for_completion()
.await;
let DeclareTransactionResult { class_hash, .. } = AccountDeclaration::cartridge_account(client)
.declare(account)
.await
.unwrap()
.wait_for_completion()
.await;

class_hash
}
Expand All @@ -72,8 +71,8 @@ pub async fn deploy(
) -> FieldElement {
let DeployResult {
deployed_address, ..
} = AccountDeployment::new(&client)
.deploy(vec![public_key], FieldElement::ZERO, &account, class_hash)
} = AccountDeployment::new(client)
.deploy(vec![public_key], FieldElement::ZERO, account, class_hash)
.await
.unwrap()
.wait_for_completion()
Expand Down
8 changes: 4 additions & 4 deletions crates/account_sdk/src/tests/session/uitls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ use crate::{abigen::account::Call, tests::runners::TestnetRunner};

use crate::session_token::Session;

pub async fn create_session_account<'a, T>(
runner: &'a T,
pub async fn create_session_account<T>(
runner: &T,
) -> (
SessionAccount<&'a JsonRpcClient<HttpTransport>, LocalWallet>,
SessionAccount<&JsonRpcClient<HttpTransport>, LocalWallet>,
SigningKey,
SingleOwnerAccount<&'a JsonRpcClient<HttpTransport>, LocalWallet>,
SingleOwnerAccount<&JsonRpcClient<HttpTransport>, LocalWallet>,
)
where
T: TestnetRunner,
Expand Down
2 changes: 1 addition & 1 deletion crates/cartridge_account/src/lib.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ mod Account {
}

fn _execute_single_call(call: Call) -> Span<felt252> {
let Call{to, selector, calldata } = call;
let Call { to, selector, calldata } = call;
starknet::call_contract_syscall(to, selector, calldata).unwrap()
}
}
6 changes: 2 additions & 4 deletions crates/webauthn/auth/src/deserializable_endpoints.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,11 @@ fn verify_hashed_ecdsa_endpoint(
verify_hashed_ecdsa(pub_key_point, msg_hash, r, s)
}

fn expand_auth_data_endpoint(
auth_data: Array<u8>
) -> AuthenticatorData {
fn expand_auth_data_endpoint(auth_data: Array<u8>) -> AuthenticatorData {
let data: Option<AuthenticatorData> = ImplArrayu8TryIntoAuthData::try_into(auth_data);
return data.unwrap();
}

fn extract_u256_from_u8_array_endpoint(bytes: Array<u8>, offset: u32) -> Option<u256> {
extract_u256_from_u8_array(@bytes, offset)
}
}
3 changes: 0 additions & 3 deletions crates/webauthn/session/src/lib.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@ mod signature;
mod interface;
mod deserializable_endpoints;

#[cfg(test)]
mod tests;

const SESSION_TOKEN_V1: felt252 = 'Session Token v1';

// Based on https://github.com/argentlabs/starknet-plugin-account/blob/3c14770c3f7734ef208536d91bbd76af56dc2043/contracts/plugins/SessionKey.cairo
Expand Down
30 changes: 30 additions & 0 deletions crates/webauthn/session/src/signature.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,33 @@ impl ImplSignatureProofs of SignatureProofsTrait {
self.proofs_flat.slice(index * self.single_proof_len, self.single_proof_len)
}
}

#[cfg(test)]
mod tests {
use alexandria_data_structures::array_ext::ArrayTraitExt;
use alexandria_merkle_tree::merkle_tree::{
Hasher, MerkleTree, pedersen::PedersenHasherImpl, MerkleTreeTrait
};
use core::box::BoxTrait;
use core::array::SpanTrait;
use core::{TryInto, Into};
use core::ecdsa::check_ecdsa_signature;
use starknet::info::{TxInfo, get_tx_info, get_block_timestamp};
use starknet::{contract_address::ContractAddress};
use webauthn_session::hash::{compute_session_hash, compute_call_hash};

use super::{SessionSignature, SignatureProofs, SignatureProofsTrait};

#[test]
#[available_gas(200000000000)]
fn test_session_deserialize() {
let mut sig = array![
0x1, 0x42, 0x43, 0x69, 18446744073709551615, 0x0, 0x1, 0x1, 0x44, 0x1, 0x2137,
]
.span();

let deser: SessionSignature = Serde::<SessionSignature>::deserialize(ref sig).unwrap();
assert(deser.r == 0x42, 'invalid r');
assert(deser.proofs.len() == 1, 'invalid proofs len');
}
}
3 changes: 0 additions & 3 deletions crates/webauthn/session/src/tests.cairo

This file was deleted.

27 changes: 0 additions & 27 deletions crates/webauthn/session/src/tests/signature_deserialization.cairo

This file was deleted.

6 changes: 6 additions & 0 deletions crates/webauthn/tests/src/arg_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ impl ArgsBuilder {
}
}

impl Default for ArgsBuilder {
fn default() -> Self {
Self::new()
}
}

pub trait FeltSerialize {
fn to_felts(self) -> Vec<Felt252>;
}
2 changes: 1 addition & 1 deletion crates/webauthn/tests/src/auth/expand_auth_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ impl FeltSerialize for AuthenticatorData {

#[test]
fn test_expand_auth_data_1() {
let d: Vec<u8> = (0_u8..32_u8).into_iter().collect();
let d: Vec<u8> = (0_u8..32_u8).collect();
let auth_data = AuthenticatorData {
rp_id_hash: d.try_into().unwrap(),
flags: 0,
Expand Down
27 changes: 13 additions & 14 deletions crates/webauthn/tests/src/auth/verify_signature.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ fn verify_signature(
.add_array(hash.iter().cloned())
.add_array(auth_data.iter().cloned())
.add_struct(pub_key.to_felts())
.add_array(r.into_iter().copied().chain(s.iter().copied()));
.add_array(r.iter().copied().chain(s.iter().copied()));
let result: [Felt252; 2] = VERIFY_SIGNATURE.run(args.build());
result == [0.into(), 0.into()]
}
Expand All @@ -39,7 +39,7 @@ fn test_verify_signature_1() {
let hash: &[u8] = b"hello world";
let auth_data = b"dummy auth data";
let signing_key = SigningKey::random(&mut OsRng);
let (signature, _) = signing_key.sign(&vec![auth_data, hash].concat());
let (signature, _) = signing_key.sign(&[auth_data, hash].concat());
assert!(verify_signature(hash, auth_data, signing_key, signature))
}

Expand All @@ -48,7 +48,7 @@ fn test_verify_signature_2() {
let hash: &[u8] = b"1234567890987654321";
let auth_data = b"auuuuuuuuuuth daaaaataaaaaaaaaa";
let signing_key = SigningKey::random(&mut OsRng);
let (signature, _) = signing_key.sign(&vec![auth_data, hash].concat());
let (signature, _) = signing_key.sign(&[auth_data, hash].concat());
assert!(verify_signature(hash, auth_data, signing_key, signature))
}

Expand All @@ -58,11 +58,8 @@ fn test_verify_signature_should_fail_1() {
let auth_data = b"dummy auth data";
let wrong_hash: &[u8] = b"definetly not hello world";
let signing_key = SigningKey::random(&mut OsRng);
let (signature, _) = signing_key.sign(&vec![auth_data, wrong_hash].concat());
assert_eq!(
verify_signature(hash, auth_data, signing_key, signature),
false
)
let (signature, _) = signing_key.sign(&[auth_data, wrong_hash].concat());
assert!(!verify_signature(hash, auth_data, signing_key, signature),)
}

#[test]
Expand All @@ -71,11 +68,13 @@ fn test_verify_signature_should_fail_2() {
let auth_data = b"dummy auth data";
let signing_key = SigningKey::random(&mut OsRng);
let other_signing_key = SigningKey::random(&mut OsRng);
let (signature, _) = signing_key.sign(&vec![auth_data, hash].concat());
assert_eq!(
verify_signature(hash, auth_data, other_signing_key, signature),
false
)
let (signature, _) = signing_key.sign(&[auth_data, hash].concat());
assert!(!verify_signature(
hash,
auth_data,
other_signing_key,
signature
))
}

proptest! {
Expand All @@ -90,7 +89,7 @@ proptest! {
.prop_map(|b| SigningKey::from(SecretKey::from_bytes(&b.into()).unwrap()))
),
) {
let (signature, _) = signing_key.sign(&vec![auth_data.clone(), hash.clone()].concat());
let (signature, _) = signing_key.sign(&[auth_data.clone(), hash.clone()].concat());
assert!(verify_signature(&hash, &auth_data, signing_key, signature))
}
}
2 changes: 1 addition & 1 deletion crates/webauthn/tests/src/prop_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use proptest::prelude::*;
pub struct Felt252Strategy;

impl Felt252Strategy {
pub fn new() -> impl Strategy<Value = Felt252> {
pub fn new_strategy() -> impl Strategy<Value = Felt252> {
prop::collection::vec(any::<u8>(), 32..=32).prop_map(|b| Felt252::from_bytes_be(&b))
}
}
2 changes: 1 addition & 1 deletion crates/webauthn/tests/src/session/prop_signature_proofs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ fn vec_vec_felt252_strategy(
) -> impl Strategy<Value = (Vec<Vec<Felt252>>, usize)> {
(
prop::collection::vec(
prop::collection::vec(Felt252Strategy::new(), inner_len..=inner_len),
prop::collection::vec(Felt252Strategy::new_strategy(), inner_len..=inner_len),
outer_len..=outer_len,
),
Just(inner_len),
Expand Down
4 changes: 2 additions & 2 deletions crates/webauthn/tests/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ use cairo_args_runner::errors::SierraRunnerError;
use cairo_args_runner::SuccessfulRun;
use cairo_args_runner::{Arg, Felt252};

pub const WEBAUTHN_SIERRA_TARGET: &'static str = "../../../target/dev/webauthn_auth.sierra.json";
pub const SESSION_SIERRA_TARGET: &'static str = "../../../target/dev/webauthn_session.sierra.json";
pub const WEBAUTHN_SIERRA_TARGET: &str = "../../../target/dev/webauthn_auth.sierra.json";
pub const SESSION_SIERRA_TARGET: &str = "../../../target/dev/webauthn_session.sierra.json";

#[derive(Debug, Clone, Copy)]
pub struct Function<'a, AP, RE>
Expand Down
Loading