Skip to content

Commit dc9344a

Browse files
committed
Generated candid file for utils
1 parent 72a926b commit dc9344a

File tree

6 files changed

+103
-5
lines changed

6 files changed

+103
-5
lines changed

candid/utils.did

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
type AccessList = record { storage_keys : vec vec nat8; address : vec nat8 };
2+
type Item = variant {
3+
Num : nat64;
4+
Raw : vec nat8;
5+
Empty;
6+
List : List;
7+
Text : text;
8+
};
9+
type List = record { values : vec Item };
10+
type Result = variant { Ok : vec nat8; Err : text };
11+
type Result_1 = variant { Ok : Transaction; Err : text };
12+
type Result_2 = variant { Ok : List; Err : text };
13+
type Signature = record {
14+
r : vec nat8;
15+
s : vec nat8;
16+
v : nat64;
17+
from : opt vec nat8;
18+
hash : vec nat8;
19+
};
20+
type Transaction = variant {
21+
EIP1559 : Transaction1559;
22+
EIP2930 : Transaction2930;
23+
Legacy : TransactionLegacy;
24+
};
25+
type Transaction1559 = record {
26+
to : vec nat8;
27+
value : nat64;
28+
max_priority_fee_per_gas : nat64;
29+
data : vec nat8;
30+
sign : opt Signature;
31+
max_fee_per_gas : nat64;
32+
chain_id : nat64;
33+
nonce : nat64;
34+
gas_limit : nat64;
35+
access_list : vec AccessList;
36+
};
37+
type Transaction2930 = record {
38+
to : vec nat8;
39+
value : nat64;
40+
data : vec nat8;
41+
sign : opt Signature;
42+
chain_id : nat64;
43+
nonce : nat64;
44+
gas_limit : nat64;
45+
access_list : vec AccessList;
46+
gas_price : nat64;
47+
};
48+
type TransactionLegacy = record {
49+
to : vec nat8;
50+
value : nat64;
51+
data : vec nat8;
52+
sign : opt Signature;
53+
chain_id : nat64;
54+
nonce : nat64;
55+
gas_limit : nat64;
56+
gas_price : nat64;
57+
};
58+
service : {
59+
create_transaction : (Transaction) -> (Result) query;
60+
keccak256 : (vec nat8) -> (vec nat8) query;
61+
parse_transaction : (vec nat8) -> (Result_1) query;
62+
rlp_decode : (vec nat8) -> (Result_2) query;
63+
rlp_encode : (List) -> (Result) query;
64+
}

src/evm_utils/src/hash.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
use crate::{types::num::U256, utils};
2+
use candid::candid_method;
23
use ic_cdk::query;
34

45
/// Returns hash of given data using keccak256
56
#[query]
7+
#[candid_method(query)]
68
fn keccak256(data: Vec<u8>) -> U256 {
79
utils::keccak256(&[&data[..]])
810
}

src/evm_utils/src/rlp.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
use crate::types::rlp::List;
22

3+
use candid::candid_method;
34
use ic_cdk_macros::query;
45

56
#[query]
7+
#[candid_method(query)]
68
fn rlp_encode(data: List) -> Result<Vec<u8>, String> {
79
let raw = rlp::encode(&data);
810

911
Ok(raw.to_vec())
1012
}
1113

1214
#[query]
15+
#[candid_method(query)]
1316
fn rlp_decode(raw: Vec<u8>) -> Result<List, String> {
1417
let item: List = rlp::decode(&raw).map_err(|x| format!("{x}"))?;
1518

src/evm_utils/src/transaction.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
use candid::{candid_method, export_service};
12
use ic_cdk_macros::query;
23

4+
use crate::types::num::U256;
5+
use crate::types::rlp::List;
36
use crate::types::transaction::Transaction;
47

58
/// Encodes transaction in rlp, ready to be signed
69
#[query]
10+
#[candid_method(query)]
711
fn create_transaction(data: Transaction) -> Result<Vec<u8>, String> {
812
let raw = data.encode(true);
913

@@ -12,9 +16,32 @@ fn create_transaction(data: Transaction) -> Result<Vec<u8>, String> {
1216

1317
/// Parses raw transaction, supports Legacy, EIP1559, EIP2930
1418
#[query]
19+
#[candid_method(query)]
1520
fn parse_transaction(data: Vec<u8>) -> Result<Transaction, String> {
1621
let item =
1722
Transaction::decode(&data).map_err(|x| format!("Error while decoding transaction {x}"))?;
1823

1924
Ok(item)
2025
}
26+
27+
#[query(name = "__get_candid_interface_tmp_hack")]
28+
fn export_candid() -> String {
29+
export_service!();
30+
__export_service()
31+
}
32+
33+
#[cfg(test)]
34+
mod tests {
35+
use super::*;
36+
37+
#[test]
38+
fn save_candid() {
39+
use std::env;
40+
use std::fs::write;
41+
use std::path::PathBuf;
42+
43+
let dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
44+
let dir = dir.parent().unwrap().parent().unwrap().join("candid");
45+
write(dir.join("utils.did"), export_candid()).expect("Write failed.");
46+
}
47+
}

src/evm_utils/src/tree.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
use candid::candid_method;
12
use hasher::HasherKeccak;
23
use ic_cdk::query;
34

45
#[query]
6+
#[candid_method(query)]
57
fn verify_proof(
68
root: Vec<u8>,
79
key: Vec<u8>,

src/evm_utils/src/utils.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::error::Error;
22

3+
use candid::candid_method;
34
use ic_cdk::query;
45
use secp256k1::ecdsa::RecoverableSignature;
56
use secp256k1::ecdsa::RecoveryId;
@@ -44,16 +45,12 @@ pub fn _recover_public_key(
4445
let hash = keccak256(&[msg]);
4546
let msg = Message::from_slice(&hash.0)?;
4647

47-
// println!("r {}", hex::encode(r));
48-
// println!("s {}", hex::encode(s));
49-
// println!("v {}", v);
50-
// println!("msg {}", msg);
51-
5248
let pub_k = rec_sig.recover(&msg)?;
5349
Ok(pub_k)
5450
}
5551

5652
#[query]
53+
#[candid_method(query)]
5754
fn recover_public_key(signature: Vec<u8>, msg: Vec<u8>) -> Result<Vec<u8>, String> {
5855
if signature.len() != 65 {
5956
Err(String::from("Invalid signature length!, should be 65"))
@@ -71,6 +68,7 @@ fn recover_public_key(signature: Vec<u8>, msg: Vec<u8>) -> Result<Vec<u8>, Strin
7168
}
7269

7370
#[query]
71+
#[candid_method(query)]
7472
fn pub_to_address(public_key: Vec<u8>) -> Result<Vec<u8>, String> {
7573
let pub_k = PublicKey::from_slice(&public_key[..])
7674
.map_err(|x| format!("Error while reading public key {x}"))?;
@@ -81,6 +79,7 @@ fn pub_to_address(public_key: Vec<u8>) -> Result<Vec<u8>, String> {
8179
}
8280

8381
#[query]
82+
#[candid_method(query)]
8483
fn is_valid_public(public_key: Vec<u8>) -> Result<(), String> {
8584
PublicKey::from_slice(&public_key[..])
8685
.map_err(|x| format!("Error while reading public key {x}"))?;
@@ -89,6 +88,7 @@ fn is_valid_public(public_key: Vec<u8>) -> Result<(), String> {
8988
}
9089

9190
#[query]
91+
#[candid_method(query)]
9292
fn is_valid_signature(signature: Vec<u8>) -> Result<(), String> {
9393
if signature.len() != 65 {
9494
Err(String::from("Invalid signature length!, should be 65"))

0 commit comments

Comments
 (0)