Skip to content

Commit 430fb70

Browse files
tabaktonipenovicp
andauthored
feat: a CairoByteArray, CairoTypes, updates (#1469)
* feat: byteArray for byte arrays * chore: unstaged files * feat: initial impl. ByteArray using composable Cairo types, Cairobyte31, CairoFelt252, CairoUint32 * feat: polish tests and implementation, Api factory added * fix: bytearray integration tests without parser, fix padding and compile * chore: integration test * feat: extend parser to configurable response parsing, integrate CairoByteArray * fix: compiled api request calldata should be hex not decimal string * feat: parserHR, contract integration, contract prop req/res parsing, Compiler + custom parser * feat: contract optional waitForTransaction on ivoke * feat: contract invoke waitForTransaction, fix: tx receipt helper fixed narrow response type * feat: new data driven parsing strategy,def hdParsingStrategy and fastParsingStrategy * feat: init parsing strategies, test: event byteArray, fix: decodeUtf8 * feat: integrate rest of the simplest CairoTypes in parsing strategy * feat: reduce TX wait time, and provide known failed reasons based on TX flow * test: eventless write bytearray xtest * feat: uint static factory methods * refactor: cleanup * feat: missing primitive integers implemented as cairo types * chore: cleanup * feat: CairoType integers (#1472) * feat: reduce TX wait time, and provide known failed reasons based on TX flow * test: eventless write bytearray xtest * feat: uint static factory methods * refactor: cleanup * feat: missing primitive integers implemented as cairo types * chore: cleanup * fix: signed int hex format, compiled helper * feat: a Buffer in browser and Buffer config * chore: typeof clenup * Update src/utils/cairoDataTypes/felt.ts Co-authored-by: Petar Penović <pp@spaceshard.io> * test: message fix --------- Co-authored-by: Petar Penović <pp@spaceshard.io>
1 parent ed60eaf commit 430fb70

File tree

97 files changed

+32252
-532
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+32252
-532
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Code generated by scarb DO NOT EDIT.
2+
version = 1
3+
4+
[[package]]
5+
name = "snforge_scarb_plugin"
6+
version = "0.45.0"
7+
source = "registry+https://scarbs.xyz/"
8+
checksum = "sha256:568482e8c40e7018d9ea729d6df3d5ec22b665cfff1e89181d8ad31bacca11cc"
9+
10+
[[package]]
11+
name = "snforge_std"
12+
version = "0.45.0"
13+
source = "registry+https://scarbs.xyz/"
14+
checksum = "sha256:c08b359c266e45c4e71b71baa3c4af8dae7fc5416fc8168f0983e5c9a2ac0abe"
15+
dependencies = [
16+
"snforge_scarb_plugin",
17+
]
18+
19+
[[package]]
20+
name = "test"
21+
version = "0.1.0"
22+
dependencies = [
23+
"snforge_std",
24+
]
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[package]
2+
name = "test"
3+
version = "0.1.0"
4+
edition = "2024_07"
5+
6+
[dependencies]
7+
starknet = "2.11.4"
8+
9+
[dev-dependencies]
10+
snforge_std = "0.45.0"
11+
assert_macros = "2.11.4"
12+
13+
[[target.starknet-contract]]
14+
sierra = true
15+
casm = true
16+
17+
[scripts]
18+
test = "snforge test"
19+
20+
[tool.scarb]
21+
allow-prebuilt-plugins = ["snforge_std"]
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// ByteArray Storage Contract Interface
2+
#[starknet::interface]
3+
pub trait IByteArrayStorage<TContractState> {
4+
fn store_message(ref self: TContractState, message: ByteArray);
5+
fn store_message_noevent(ref self: TContractState, message: ByteArray);
6+
fn read_message(self: @TContractState) -> ByteArray;
7+
}
8+
9+
// ByteArray Storage Contract
10+
#[starknet::contract]
11+
pub mod ByteArrayStorage {
12+
use starknet::get_caller_address;
13+
use starknet::storage::*;
14+
15+
#[storage]
16+
struct Storage {
17+
stored_message: ByteArray,
18+
}
19+
20+
#[event]
21+
#[derive(Drop, starknet::Event)]
22+
pub enum Event {
23+
MessageStored: MessageStored,
24+
}
25+
26+
#[derive(Drop, starknet::Event)]
27+
pub struct MessageStored {
28+
pub caller: starknet::ContractAddress,
29+
pub message: ByteArray,
30+
}
31+
32+
#[constructor]
33+
fn constructor(ref self: ContractState) {
34+
// Initialize with empty ByteArray
35+
self.stored_message.write("");
36+
}
37+
38+
#[abi(embed_v0)]
39+
impl ByteArrayStorageImpl of super::IByteArrayStorage<ContractState> {
40+
fn store_message(ref self: ContractState, message: ByteArray) {
41+
let caller = get_caller_address();
42+
43+
// Store the message in storage
44+
self.stored_message.write(message.clone());
45+
46+
// Emit event with the message
47+
self.emit(Event::MessageStored(MessageStored {
48+
caller,
49+
message
50+
}));
51+
}
52+
53+
fn store_message_noevent(ref self: ContractState, message: ByteArray) {
54+
// Store the message in storage
55+
self.stored_message.write(message.clone());
56+
}
57+
58+
fn read_message(self: @ContractState) -> ByteArray {
59+
self.stored_message.read()
60+
}
61+
}
62+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Signature: 8a477f597d28d172789f06886806bc55
2+
# This file is a cache directory tag created by scarb.
3+
# For information about cache directory tags see https://bford.info/cachedir/
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"version": 1,
3+
"contracts": [
4+
{
5+
"id": "e4evnsfe9oipm",
6+
"package_name": "test",
7+
"contract_name": "ByteArrayStorage",
8+
"module_path": "test::ByteArrayStorage",
9+
"artifacts": {
10+
"sierra": "test_ByteArrayStorage.contract_class.json",
11+
"casm": "test_ByteArrayStorage.compiled_contract_class.json"
12+
}
13+
}
14+
]
15+
}

0 commit comments

Comments
 (0)