Repository: 0xs34n/starknet.js
Pull request #537 (2023-02-23 17:49:32)

0.11.0 Sequencer API
## Motivation and Resolution
Resolve https://github.com/0xs34n/starknet.js/issues/516
only essential https://github.com/0xs34n/starknet.js/issues/432 for RPC, Sequencer, Provider. Splited this part into another PR that will deal with response types.
Expose CallData for CallData.compile usage
Fix https://github.com/0xs34n/starknet.js/issues/557
Fix https://github.com/0xs34n/starknet.js/issues/547

The basic stuff was done. didn't do cleanup nor new endpoints tests.

- [x] ``get_compiled_class_by_class_hash``
- [x] ``get_class_by_hash``
- [x] implement ``computeSieraContractClassHash``
- [x] get_full_contract
- [x] get_state_update
- [x] get_block
- [x] get_transaciton
- [x] estimate_fee
- [ ] update docs for hash Cairo1


### RPC version (if applicable)
Hotfixed current provider - rpc interface until the new RPC release

## Usage related changes
``LegacyContractClass`` equal to old ``ContractClass`` 
``ContractClass`` equal to ``LegacyContractClass | SieraContractClass``


## Development related changes
estimate fee does not work with 'feeTransactionVersion_2' (2n ** 128n + 2n) but only '2n' 
How to test declare v2 if can't re-declare the same contract on testnet?


## Checklist:

- [ ] Performed a self-review of the code
- [ ] Rebased to the last commit of the target branch (or merged it into my branch)
- [ ] Linked the issues which this PR resolves
- [ ] Documented the changes
- [ ] Updated the docs (www)
- [ ] Updated the tests
- [ ] All tests are passing



Patch:
diff --git a/.github/workflows/pr-push-dev.yml b/.github/workflows/pr-push-dev.yml
index cb7ace5b..f5c9017e 100644
--- a/.github/workflows/pr-push-dev.yml
+++ b/.github/workflows/pr-push-dev.yml
@@ -24,6 +24,7 @@ jobs:
     needs: [skip_check]
     if: needs.skip_check.outputs.should_skip != 'true'
     strategy:
+      fail-fast: false
       matrix:
         name: [sequencer-devnet, rpc-devnet]
         include:
diff --git a/.gitignore b/.gitignore
index 40f6c958..3a5a151f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 **/*.tgz
+**/Dockerfile
 .DS_Store
 .env
 .eslintcache
@@ -8,4 +9,4 @@ dist
 node_modules
 npm-debug.log
 package
-yarn.lock
+yarn.lock
\ No newline at end of file
diff --git a/__mocks__/cairo/helloSiera/readme.md b/__mocks__/cairo/helloSiera/readme.md
deleted file mode 100644
index c2d49ed6..00000000
--- a/__mocks__/cairo/helloSiera/readme.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# 1. Compile to starknet siera json
-
-`cargo run --bin starknet-compile -- /Users/eedev/Work/ShardLabs/cairo1.0-contract-demo/hello/hello.cairo /Users/eedev/Work/ShardLabs/cairo1.0-contract-demo/hello/hello.json`
-
-# 2. Compile to casm
-
-`cargo run --bin starknet-compile -- /Users/eedev/Work/ShardLabs/cairo1.0-contract-demo/hello/hello.cairo /Users/eedev/Work/ShardLabs/cairo1.0-contract-demo/hello/hello.json --allowed-libfuncs-list-name experimental_v0.1.0`
-
-# 3. Get Compiled Class Hash
-
-`python3 cch.py /Users/eedev/Work/ShardLabs/cairo1.0-contract-demo/hello/hello.casm`
-0x5308ae7d698bdb9cb9ee6e9c7dab4d3082a3db40933634645f179d9cad06446
diff --git a/__mocks__/cairo/helloSiera/hello.cairo b/__mocks__/cairo/helloSierra/hello.cairo
similarity index 71%
rename from __mocks__/cairo/helloSiera/hello.cairo
rename to __mocks__/cairo/helloSierra/hello.cairo
index ebc9133b..41c0e878 100644
--- a/__mocks__/cairo/helloSiera/hello.cairo
+++ b/__mocks__/cairo/helloSierra/hello.cairo
@@ -1,18 +1,18 @@
 #[contract]
 mod HelloStarknet {
     struct Storage {
-        balance: felt, 
+        balance: felt252, 
     }
 
     // Increases the balance by the given amount.
     #[external]
-    fn increase_balance(amount: felt) {
+    fn increase_balance(amount: felt252) {
         balance::write(balance::read() + amount);
     }
 
     // Returns the current balance.
     #[view]
-    fn get_balance() -> felt {
+    fn get_balance() -> felt252 {
         balance::read()
     }
 }
diff --git a/__mocks__/cairo/helloSiera/hello.casm b/__mocks__/cairo/helloSierra/hello.casm
similarity index 70%
rename from __mocks__/cairo/helloSiera/hello.casm
rename to __mocks__/cairo/helloSierra/hello.casm
index 0a0e3765..ab76f78d 100644
--- a/__mocks__/cairo/helloSiera/hello.casm
+++ b/__mocks__/cairo/helloSierra/hello.casm
@@ -3,30 +3,29 @@
   "compiler_version": "1.0.0",
   "bytecode": [
     "0x40780017fff7fff",
-    "0x4",
+    "0x3",
     "0xa0680017fff8000",
     "0x7",
     "0x482680017ffa8000",
     "0x100000000000000000000000000000000",
     "0x400280007ff97fff",
     "0x10780017fff7fff",
-    "0x7d",
+    "0x7c",
     "0x4825800180007ffa",
     "0x0",
     "0x400280007ff97fff",
     "0x480a7ffc7fff8000",
     "0x480a7ffd7fff8000",
     "0x1104800180018000",
-    "0x106",
-    "0x40137ffe7fff8000",
-    "0x40137fff7fff8001",
+    "0x105",
     "0x482680017ff98000",
     "0x1",
-    "0x40137fef7fff8003",
-    "0x40137fff7fff8002",
-    "0x20780017fff8000",
-    "0x60",
+    "0x40137fed7fff8002",
+    "0x40137fff7fff8001",
+    "0x20680017fff7ffd",
+    "0x61",
     "0x48307ffb80007ffc",
+    "0x40137ffd7fff8000",
     "0x4824800180007fff",
     "0x0",
     "0x20680017fff7fff",
@@ -45,28 +44,28 @@
     "0x20680017fff7fff",
     "0x3d",
     "0x1104800180018000",
-    "0x1d0",
+    "0x1c6",
     "0x482480017fff8000",
-    "0x1cf",
+    "0x1c5",
     "0x480080007fff8000",
     "0xa0680017fff8000",
     "0x9",
-    "0x4825800180008003",
+    "0x4825800180008002",
     "0x6b08",
     "0x482480017fff8000",
     "0x100000000000000000000000000000000",
-    "0x4002800080027fff",
+    "0x4002800080017fff",
     "0x10780017fff7fff",
     "0x20",
-    "0x4825800180008003",
+    "0x4825800180008002",
     "0x6b08",
-    "0x4002800080027fff",
+    "0x4002800080017fff",
     "0x48127fff7fff8000",
     "0x480a7ffb7fff8000",
-    "0x480a80017fff8000",
+    "0x480a80007fff8000",
     "0x1104800180018000",
-    "0xfa",
-    "0x4826800180028000",
+    "0x105",
+    "0x4826800180018000",
     "0x1",
     "0x20680017fff7ffc",
     "0xc",
@@ -93,9 +92,9 @@
     "0x480680017fff8000",
     "0x4f7574206f6620676173",
     "0x400080007ffe7fff",
-    "0x4826800180028000",
+    "0x4826800180018000",
     "0x1",
-    "0x480a80037fff8000",
+    "0x480a80027fff8000",
     "0x480a7ffb7fff8000",
     "0x480680017fff8000",
     "0x1",
@@ -105,14 +104,14 @@
     "0x208b7fff7fff7ffe",
     "0x480a7ffb7fff8000",
     "0x1104800180018000",
-    "0xf8",
+    "0x103",
     "0x40780017fff7fff",
     "0x1",
     "0x480680017fff8000",
     "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473",
     "0x400080007ffe7fff",
+    "0x480a80017fff8000",
     "0x480a80027fff8000",
-    "0x480a80037fff8000",
     "0x48127ffb7fff8000",
     "0x480680017fff8000",
     "0x1",
@@ -125,8 +124,8 @@
     "0x480680017fff8000",
     "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473",
     "0x400080007ffe7fff",
+    "0x480a80017fff8000",
     "0x480a80027fff8000",
-    "0x480a80037fff8000",
     "0x480a7ffb7fff8000",
     "0x480680017fff8000",
     "0x1",
@@ -184,26 +183,26 @@
     "0x20680017fff7fff",
     "0x41",
     "0x1104800180018000",
-    "0x145",
+    "0x13b",
     "0x482480017fff8000",
-    "0x144",
+    "0x13a",
     "0x480080007fff8000",
     "0xa0680017fff8000",
     "0x9",
     "0x4825800180008001",
-    "0x1fcc",
+    "0x3584",
     "0x482480017fff8000",
     "0x100000000000000000000000000000000",
     "0x4002800080007fff",
     "0x10780017fff7fff",
     "0x24",
     "0x4825800180008001",
-    "0x1fcc",
+    "0x3584",
     "0x4002800080007fff",
     "0x48127fff7fff8000",
     "0x480a7ffb7fff8000",
     "0x1104800180018000",
-    "0x98",
+    "0xa3",
     "0x4826800180008000",
     "0x1",
     "0x20680017fff7ffc",
@@ -212,9 +211,9 @@
     "0x1",
     "0x48127fff7fff8000",
     "0x48127ffe7fff8000",
-    "0x48127ffa7fff8000",
+    "0x48127ffb7fff8000",
     "0x1104800180018000",
-    "0xa2",
+    "0xc9",
     "0x48127ff77fff8000",
     "0x48127ff17fff8000",
     "0x48127ff17fff8000",
@@ -248,7 +247,7 @@
     "0x208b7fff7fff7ffe",
     "0x480a7ffb7fff8000",
     "0x1104800180018000",
-    "0x69",
+    "0x74",
     "0x40780017fff7fff",
     "0x1",
     "0x480680017fff8000",
@@ -288,7 +287,7 @@
     "0x480a7ffd7fff8000",
     "0x480680017fff8000",
     "0x0",
-    "0x480280007ffc8000",
+    "0x480a7ffc7fff8000",
     "0x10780017fff7fff",
     "0x8",
     "0x480a7ffc7fff8000",
@@ -300,15 +299,26 @@
     "0x48127ffc7fff8000",
     "0x48127ffc7fff8000",
     "0x20680017fff7ffc",
+    "0x7",
+    "0x480680017fff8000",
+    "0x0",
+    "0x480080007ffc8000",
+    "0x10780017fff7fff",
+    "0x6",
+    "0x480680017fff8000",
+    "0x1",
+    "0x480680017fff8000",
+    "0x0",
+    "0x20680017fff7ffe",
     "0x8",
-    "0x48127ffe7fff8000",
-    "0x48127ffe7fff8000",
+    "0x48127ffc7fff8000",
+    "0x48127ffc7fff8000",
     "0x480680017fff8000",
     "0x0",
-    "0x48127ffa7fff8000",
+    "0x48127ffc7fff8000",
     "0x208b7fff7fff7ffe",
-    "0x48127ffe7fff8000",
-    "0x48127ffe7fff8000",
+    "0x48127ffc7fff8000",
+    "0x48127ffc7fff8000",
     "0x480680017fff8000",
     "0x1",
     "0x480680017fff8000",
@@ -317,14 +327,14 @@
     "0x480a7ffb7fff8000",
     "0x480a7ffc7fff8000",
     "0x1104800180018000",
-    "0x40",
+    "0x26",
     "0x20680017fff7ffd",
     "0x19",
     "0x48127ffb7fff8000",
     "0x48127ffb7fff8000",
-    "0x48287ffd7ffc8000",
+    "0x48287ffd7ffd8000",
     "0x1104800180018000",
-    "0x6a",
+    "0x55",
     "0x20680017fff7ffd",
     "0xb",
     "0x48127ffb7fff8000",
@@ -354,32 +364,6 @@
     "0x208b7fff7fff7ffe",
     "0x480a7ffd7fff8000",
     "0x208b7fff7fff7ffe",
-    "0x480a7ffc7fff8000",
-    "0x480a7ffd7fff8000",
-    "0x1104800180018000",
-    "0x18",
-    "0x20680017fff7ffd",
-    "0xa",
-    "0x48127ffb7fff8000",
-    "0x48127ffb7fff8000",
-    "0x480680017fff8000",
-    "0x0",
-    "0x48127ffb7fff8000",
-    "0x480680017fff8000",
-    "0x0",
-    "0x208b7fff7fff7ffe",
-    "0x48127ffb7fff8000",
-    "0x48127ffb7fff8000",
-    "0x480680017fff8000",
-    "0x1",
-    "0x48127ffb7fff8000",
-    "0x48127ffb7fff8000",
-    "0x208b7fff7fff7ffe",
-    "0x400380007ffc7ffd",
-    "0x480a7ffb7fff8000",
-    "0x482680017ffc8000",
-    "0x1",
-    "0x208b7fff7fff7ffe",
     "0x480680017fff8000",
     "0x0",
     "0x480680017fff8000",
@@ -398,9 +382,9 @@
     "0x7",
     "0x480680017fff8000",
     "0x0",
-    "0x480280067ffd8000",
     "0x480680017fff8000",
     "0x0",
+    "0x480280067ffd8000",
     "0x10780017fff7fff",
     "0x9",
     "0x480280047ffd8000",
@@ -411,16 +395,16 @@
     "0x480280067ffd8000",
     "0x480280077ffd8000",
     "0x1104800180018000",
-    "0x47",
+    "0x4c",
     "0x20680017fff7ffd",
     "0xa",
     "0x48127ff67fff8000",
     "0x48127ff67fff8000",
     "0x480680017fff8000",
     "0x0",
-    "0x48127ffb7fff8000",
     "0x480680017fff8000",
     "0x0",
+    "0x48127ffb7fff8000",
     "0x208b7fff7fff7ffe",
     "0x48127ff67fff8000",
     "0x48127ff67fff8000",
@@ -429,6 +413,11 @@
     "0x48127ffb7fff8000",
     "0x48127ffb7fff8000",
     "0x208b7fff7fff7ffe",
+    "0x400380007ffc7ffd",
+    "0x480a7ffb7fff8000",
+    "0x482680017ffc8000",
+    "0x1",
+    "0x208b7fff7fff7ffe",
     "0x480680017fff8000",
     "0x0",
     "0x480680017fff8000",
@@ -485,9 +474,9 @@
     "0x8",
     "0x480680017fff8000",
     "0x0",
-    "0x480a7ffc7fff8000",
     "0x480680017fff8000",
     "0x0",
+    "0x480a7ffd7fff8000",
     "0x208b7fff7fff7ffe",
     "0x480680017fff8000",
     "0x1",
@@ -510,6 +499,243 @@
     "0x208b7fff7fff7ffe"
   ],
   "hints": [
+    [
+      2,
+      [
+        {
+          "TestLessThanOrEqual": {
+            "lhs": {
+              "Immediate": "0x0"
+            },
+            "rhs": {
+              "Deref": {
+                "register": "FP",
+                "offset": -6
+              }
+            },
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      46,
+      [
+        {
+          "TestLessThanOrEqual": {
+            "lhs": {
+              "Immediate": "0x6b08"
+            },
+            "rhs": {
+              "Deref": {
+                "register": "FP",
+                "offset": 2
+              }
+            },
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      67,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      85,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      103,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      117,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      131,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      148,
+      [
+        {
+          "TestLessThanOrEqual": {
+            "lhs": {
+              "Immediate": "0x0"
+            },
+            "rhs": {
+              "Deref": {
+                "register": "FP",
+                "offset": -6
+              }
+            },
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      185,
+      [
+        {
+          "TestLessThanOrEqual": {
+            "lhs": {
+              "Immediate": "0x3584"
+            },
+            "rhs": {
+              "Deref": {
+                "register": "FP",
+                "offset": 1
+              }
+            },
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      205,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      228,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      246,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      260,
+      [
+        {
+          "AllocSegment": {
+            "dst": {
+              "register": "AP",
+              "offset": 0
+            }
+          }
+        }
+      ]
+    ],
+    [
+      372,
+      [
+        {
+          "SystemCall": {
+            "system": {
+              "Deref": {
+                "register": "FP",
+                "offset": -3
+              }
+            }
+          }
+        }
+      ]
+    ],
+    [
+      427,
+      [
+        {
+          "SystemCall": {
+            "system": {
+              "Deref": {
+                "register": "FP",
+                "offset": -4
+              }
+            }
+          }
+        }
+      ]
+    ]
+  ],
+  "pythonic_hints": [
     [
       2,
       [
@@ -517,85 +743,85 @@
       ]
     ],
     [
-      47,
+      46,
       [
-        "memory[ap + 0] = 27400 <= memory[fp + 3]"
+        "memory[ap + 0] = 27400 <= memory[fp + 2]"
       ]
     ],
     [
-      68,
+      67,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      86,
+      85,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      104,
+      103,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      118,
+      117,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      132,
+      131,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      149,
+      148,
       [
         "memory[ap + 0] = 0 <= memory[fp + -6]"
       ]
     ],
     [
-      186,
+      185,
       [
-        "memory[ap + 0] = 8140 <= memory[fp + 1]"
+        "memory[ap + 0] = 13700 <= memory[fp + 1]"
       ]
     ],
     [
-      206,
+      205,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      229,
+      228,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      247,
+      246,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      261,
+      260,
       [
         "memory[ap + 0] = segments.add()"
       ]
     ],
     [
-      388,
+      372,
       [
         "syscall_handler.syscall(syscall_ptr=memory[fp + -3])"
       ]
     ],
     [
-      438,
+      427,
       [
         "syscall_handler.syscall(syscall_ptr=memory[fp + -4])"
       ]
@@ -612,7 +838,7 @@
       },
       {
         "selector": "0x39e11d48192e4333233c7eb19d10ad67c362bb28580c604d67884c85da39695",
-        "offset": 147,
+        "offset": 146,
         "builtins": [
           "range_check"
         ]
diff --git a/__mocks__/cairo/helloSiera/hello.json b/__mocks__/cairo/helloSierra/hello.json
similarity index 94%
rename from __mocks__/cairo/helloSiera/hello.json
rename to __mocks__/cairo/helloSierra/hello.json
index cd6339dd..63dc2442 100644
--- a/__mocks__/cairo/helloSiera/hello.json
+++ b/__mocks__/cairo/helloSierra/hello.json
@@ -1,37 +1,25 @@
 {
   "sierra_program": [
     "0x302e312e30",
-    "0x1a",
-    "0x66656c74",
-    "0x0",
-    "0x537472756374",
-    "0x1",
-    "0x0",
-    "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3",
-    "0x456e756d",
-    "0x3",
-    "0x0",
-    "0xe3db735044fe6680868d75a64336beaf045a28972f57a2d1ec1729a1c83df5",
-    "0x1",
+    "0x1c",
+    "0x66656c74323532",
     "0x0",
-    "0x1",
-    "0x1",
     "0x556e696e697469616c697a6564",
     "0x1",
     "0x1",
-    "0x2",
+    "0x0",
     "0x52616e6765436865636b",
     "0x0",
     "0x556e696e697469616c697a6564",
     "0x1",
     "0x1",
-    "0x4",
+    "0x2",
     "0x4761734275696c74696e",
     "0x0",
     "0x556e696e697469616c697a6564",
     "0x1",
     "0x1",
-    "0x6",
+    "0x4",
     "0x4172726179",
     "0x1",
     "0x1",
@@ -39,11 +27,23 @@
     "0x536e617073686f74",
     "0x1",
     "0x1",
-    "0x8",
+    "0x6",
     "0x537472756374",
     "0x2",
     "0x0",
-    "0x30cbfb410ceb3229e20be7aaacfdab2916e00d0ff54744dad788ed13b275d5b",
+    "0x1baeba72e79e9db2587cf44fedb2f3700b2075a5e8e39a562584862c4b71f62",
+    "0x1",
+    "0x7",
+    "0x537472756374",
+    "0x1",
+    "0x0",
+    "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3",
+    "0x456e756d",
+    "0x3",
+    "0x0",
+    "0x11c6d8087e00642489f92d2821ad6ebd6532ad1a3b6d12833da6d6810391511",
+    "0x1",
+    "0x0",
     "0x1",
     "0x9",
     "0x753332",
@@ -53,9 +53,9 @@
     "0x0",
     "0x3288d594b9a45d15bb2fcb7903f06cdb06b27f0ba88186ec4cfaa98307cb972",
     "0x1",
+    "0x9",
     "0x1",
-    "0x1",
-    "0x1",
+    "0x9",
     "0x4275696c74696e436f737473",
     "0x0",
     "0x53797374656d",
@@ -65,7 +65,7 @@
     "0x0",
     "0x2ee1e2b1b89f8c495f200e4956278a4d47395fe262f27b52e5865c9524c08c3",
     "0x1",
-    "0x1",
+    "0x9",
     "0x456e756d",
     "0x3",
     "0x0",
@@ -73,7 +73,7 @@
     "0x1",
     "0xf",
     "0x1",
-    "0x8",
+    "0x6",
     "0x537472756374",
     "0x2",
     "0x0",
@@ -83,11 +83,11 @@
     "0x456e756d",
     "0x3",
     "0x0",
-    "0x24c74514c8f9cc211448c76abe36dcf925a53eb00188b0a6a311ddd20055b35",
+    "0x19b3b4955bdcfa379bfc5a4949111c4efdd79128f8676f4d0895419b22e2ad7",
     "0x1",
     "0x11",
     "0x1",
-    "0x8",
+    "0x6",
     "0x537472756374",
     "0x2",
     "0x0",
@@ -97,19 +97,31 @@
     "0x456e756d",
     "0x3",
     "0x0",
-    "0x8b1d439e9bc3285407a4929eefb166a0cfb37567ffb9d6e251536691d35c16",
+    "0x2f528e3c691e195fca674982b69c0dc4284f206c3ea4d680220e99b59315a92",
     "0x1",
     "0x13",
     "0x1",
-    "0x8",
+    "0x6",
+    "0x426f78",
+    "0x1",
+    "0x1",
+    "0x0",
     "0x456e756d",
     "0x3",
     "0x0",
-    "0x30818994bdc1b7fbb3ffbf82ffa79d85559430ebb477a1af3bd3009c1012f81",
+    "0x29d7d57c04a880978e7b3689f6218e507f3be17588744b58dc17762447ad0e7",
+    "0x1",
+    "0x15",
     "0x1",
+    "0x9",
+    "0x456e756d",
+    "0x3",
     "0x0",
+    "0x1354847dd909f9c299aa1275301f74fd0a986cacb09a04b548ae4619212e21",
     "0x1",
+    "0x0",
     "0x1",
+    "0x9",
     "0x53746f726167654261736541646472657373",
     "0x0",
     "0x53746f7261676541646472657373",
@@ -117,72 +129,68 @@
     "0x456e756d",
     "0x3",
     "0x0",
-    "0x3ecd5f7a9ffb17c6f59022c7837161ff4c29b2b8d1187de9ec9a612e1ace783",
+    "0x90d0203c41ad646d024845257a6eceb2f8b59b29ce7420dd518053d2edeedc",
     "0x1",
     "0x0",
     "0x1",
-    "0x8",
+    "0x6",
     "0x456e756d",
     "0x3",
     "0x0",
-    "0x2f5bfc8c89cba75131e402b1bca558b82eb61532362a092e246ea6e476d1dbd",
-    "0x1",
+    "0x101dc0399934cc08fa0d6f6f2daead4e4a38cabeea1c743e1fc28d2d6e58e99",
     "0x1",
+    "0x9",
     "0x1",
-    "0x8",
-    "0x62",
+    "0x6",
+    "0x67",
     "0x616c6c6f635f6c6f63616c",
     "0x1",
     "0x1",
-    "0x2",
+    "0x0",
     "0x616c6c6f635f6c6f63616c",
     "0x1",
     "0x1",
-    "0x4",
+    "0x2",
     "0x616c6c6f635f6c6f63616c",
     "0x1",
     "0x1",
-    "0x6",
+    "0x4",
     "0x66696e616c697a655f6c6f63616c73",
     "0x0",
     "0x7265766f6b655f61705f747261636b696e67",
     "0x0",
-    "0x6765745f676173",
+    "0x77697468647261775f676173",
     "0x0",
     "0x6272616e63685f616c69676e",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0xa",
+    "0x8",
     "0x66756e6374696f6e5f63616c6c",
     "0x1",
     "0x3",
     "0x2",
-    "0x73746f72655f6c6f63616c",
-    "0x1",
-    "0x1",
-    "0x2",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x4",
+    "0x2",
     "0x73746f72655f6c6f63616c",
     "0x1",
     "0x1",
-    "0x6",
+    "0x4",
     "0x73746f72655f6c6f63616c",
     "0x1",
     "0x1",
-    "0x4",
+    "0x2",
     "0x656e756d5f6d61746368",
     "0x1",
     "0x1",
-    "0x2",
+    "0xa",
     "0x7374727563745f6465636f6e737472756374",
     "0x1",
     "0x1",
-    "0xa",
+    "0x8",
     "0x61727261795f6c656e",
     "0x1",
     "0x1",
@@ -195,12 +203,16 @@
     "0x1",
     "0x1",
     "0xb",
+    "0x73746f72655f6c6f63616c",
+    "0x1",
+    "0x1",
+    "0x0",
     "0x7533325f6571",
     "0x0",
     "0x7374727563745f636f6e737472756374",
     "0x1",
     "0x1",
-    "0x1",
+    "0x9",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
@@ -228,19 +240,19 @@
     "0x64726f70",
     "0x1",
     "0x1",
-    "0x1",
+    "0x9",
     "0x6765745f6275696c74696e5f636f737473",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
     "0xd",
-    "0x6765745f6761735f616c6c",
+    "0x77697468647261775f6761735f616c6c",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x6",
+    "0x4",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
@@ -265,6 +277,18 @@
     "0x1",
     "0x1",
     "0x0",
+    "0x736e617073686f745f74616b65",
+    "0x1",
+    "0x1",
+    "0x6",
+    "0x64726f70",
+    "0x1",
+    "0x1",
+    "0x6",
+    "0x7374727563745f636f6e737472756374",
+    "0x1",
+    "0x1",
+    "0x8",
     "0x7374727563745f636f6e737472756374",
     "0x1",
     "0x1",
@@ -289,7 +313,7 @@
     "0x1",
     "0x1",
     "0x0",
-    "0x66656c745f636f6e7374",
+    "0x66656c743235325f636f6e7374",
     "0x1",
     "0x2",
     "0x4f7574206f6620676173",
@@ -301,19 +325,23 @@
     "0x1",
     "0x3",
     "0x4",
-    "0x66656c745f636f6e7374",
+    "0x66656c743235325f636f6e7374",
     "0x1",
     "0x2",
     "0x496e70757420746f6f206c6f6e6720666f7220617267756d656e7473",
     "0x64726f70",
     "0x1",
     "0x1",
-    "0xa",
-    "0x7374727563745f6465636f6e737472756374",
+    "0x8",
+    "0x64726f70",
+    "0x1",
     "0x1",
     "0x1",
+    "0x7374727563745f6465636f6e737472756374",
+    "0x1",
     "0x1",
-    "0x66656c745f636f6e7374",
+    "0x9",
+    "0x66656c743235325f636f6e7374",
     "0x1",
     "0x2",
     "0x496e70757420746f6f2073686f727420666f7220617267756d656e7473",
@@ -325,10 +353,6 @@
     "0x1",
     "0x1",
     "0x5",
-    "0x64726f70",
-    "0x1",
-    "0x1",
-    "0x7",
     "0x66756e6374696f6e5f63616c6c",
     "0x1",
     "0x3",
@@ -344,7 +368,7 @@
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x8",
+    "0x6",
     "0x66756e6374696f6e5f63616c6c",
     "0x1",
     "0x3",
@@ -356,109 +380,101 @@
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x15",
+    "0x16",
     "0x2",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x9",
+    "0x7",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x15",
+    "0x16",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x15",
+    "0x16",
     "0x2",
     "0x1",
-    "0x7374727563745f636f6e737472756374",
-    "0x1",
-    "0x1",
-    "0xa",
     "0x656e756d5f6d61746368",
     "0x1",
     "0x1",
-    "0x15",
-    "0x72656e616d65",
+    "0x16",
+    "0x756e626f78",
     "0x1",
     "0x1",
     "0x0",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x2",
+    "0x17",
     "0x2",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x2",
+    "0x17",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x2",
+    "0x17",
     "0x2",
     "0x1",
-    "0x66756e6374696f6e5f63616c6c",
+    "0x656e756d5f6d61746368",
     "0x1",
-    "0x3",
-    "0x7",
-    "0x66656c745f616464",
-    "0x0",
-    "0x66756e6374696f6e5f63616c6c",
     "0x1",
-    "0x3",
-    "0x8",
-    "0x7374727563745f636f6e737472756374",
+    "0x17",
+    "0x72656e616d65",
     "0x1",
     "0x1",
-    "0xf",
+    "0x0",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x10",
+    "0xa",
     "0x2",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x10",
+    "0xa",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x10",
+    "0xa",
     "0x2",
     "0x1",
-    "0x73746f72655f74656d70",
-    "0x1",
-    "0x1",
+    "0x66656c743235325f616464",
+    "0x0",
+    "0x66756e6374696f6e5f63616c6c",
     "0x1",
+    "0x3",
+    "0x7",
     "0x7374727563745f636f6e737472756374",
     "0x1",
     "0x1",
-    "0x13",
+    "0xf",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x14",
+    "0x10",
     "0x2",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x14",
+    "0x10",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x14",
+    "0x10",
     "0x2",
     "0x1",
-    "0x66656c745f636f6e7374",
+    "0x73746f72655f74656d70",
     "0x1",
-    "0x2",
-    "0x0",
+    "0x1",
+    "0x9",
     "0x73746f726167655f626173655f616464726573735f636f6e7374",
     "0x1",
     "0x2",
@@ -468,67 +484,87 @@
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x17",
+    "0x19",
     "0x73746f726167655f726561645f73797363616c6c",
     "0x0",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x18",
+    "0x1a",
     "0x2",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x18",
+    "0x1a",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x18",
+    "0x1a",
     "0x2",
     "0x1",
     "0x72656e616d65",
     "0x1",
     "0x1",
-    "0x18",
+    "0x1a",
     "0x66756e6374696f6e5f63616c6c",
     "0x1",
     "0x3",
-    "0x9",
+    "0x8",
+    "0x7374727563745f636f6e737472756374",
+    "0x1",
+    "0x1",
+    "0x13",
+    "0x656e756d5f696e6974",
+    "0x2",
+    "0x1",
+    "0x14",
+    "0x2",
+    "0x0",
+    "0x73746f72655f74656d70",
+    "0x1",
+    "0x1",
+    "0x14",
+    "0x656e756d5f696e6974",
+    "0x2",
+    "0x1",
+    "0x14",
+    "0x2",
+    "0x1",
     "0x73746f726167655f77726974655f73797363616c6c",
     "0x0",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x19",
+    "0x1b",
     "0x2",
     "0x0",
     "0x73746f72655f74656d70",
     "0x1",
     "0x1",
-    "0x19",
+    "0x1b",
     "0x656e756d5f696e6974",
     "0x2",
     "0x1",
-    "0x19",
+    "0x1b",
     "0x2",
     "0x1",
     "0x72656e616d65",
     "0x1",
     "0x1",
-    "0x19",
+    "0x1b",
     "0x66756e6374696f6e5f63616c6c",
     "0x1",
     "0x3",
-    "0xa",
+    "0x9",
     "0x656e756d5f6d61746368",
     "0x1",
     "0x1",
-    "0x18",
+    "0x1a",
     "0x656e756d5f6d61746368",
     "0x1",
     "0x1",
-    "0x19",
+    "0x1b",
     "0x18b",
     "0x0",
     "0x0",
@@ -573,7 +609,7 @@
     "0x2",
     "0x6",
     "0x8",
-    "0x67",
+    "0x6b",
     "0x2",
     "0xa",
     "0xb",
@@ -590,27 +626,18 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0xd",
+    "0xe",
     "0x0",
     "0x8",
     "0x1",
-    "0xd",
+    "0xe",
     "0x1",
     "0xffffffffffffffff",
     "0x2",
     "0xc",
-    "0x4",
+    "0xd",
     "0x0",
     "0x9",
-    "0x2",
-    "0x5",
-    "0x4",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x4",
-    "0x0",
-    "0xa",
     "0x1",
     "0x6",
     "0x1",
@@ -618,7 +645,7 @@
     "0x1",
     "0x6",
     "0x0",
-    "0xb",
+    "0xa",
     "0x2",
     "0x9",
     "0x8",
@@ -627,7 +654,7 @@
     "0x1",
     "0x8",
     "0x0",
-    "0xc",
+    "0xb",
     "0x2",
     "0x7",
     "0x6",
@@ -636,14 +663,14 @@
     "0x1",
     "0x6",
     "0x0",
-    "0xd",
+    "0xc",
     "0x1",
-    "0x4",
+    "0xd",
     "0x2",
     "0xffffffffffffffff",
     "0x1",
-    "0xe",
-    "0x5a",
+    "0x4",
+    "0x5d",
     "0x1",
     "0xf",
     "0x0",
@@ -653,7 +680,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0xe",
+    "0xd",
     "0x1",
     "0xc",
     "0x1",
@@ -661,7 +688,7 @@
     "0x1",
     "0x10",
     "0x0",
-    "0xf",
+    "0xe",
     "0x1",
     "0x10",
     "0x1",
@@ -669,14 +696,14 @@
     "0x1",
     "0x11",
     "0x0",
-    "0x10",
+    "0xf",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0x12",
     "0x0",
-    "0x11",
+    "0x10",
     "0x1",
     "0x11",
     "0x1",
@@ -684,6 +711,15 @@
     "0x1",
     "0x11",
     "0x0",
+    "0x11",
+    "0x2",
+    "0x5",
+    "0x4",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x4",
+    "0x0",
     "0x12",
     "0x2",
     "0x11",
@@ -781,7 +817,7 @@
     "0xffffffffffffffff",
     "0x1",
     "0x19",
-    "0x4a",
+    "0x4d",
     "0x1",
     "0x1a",
     "0x0",
@@ -823,7 +859,7 @@
     "0x2",
     "0x1c",
     "0x1d",
-    "0x3e",
+    "0x41",
     "0x2",
     "0x1e",
     "0x1f",
@@ -852,7 +888,7 @@
     "0x0",
     "0x20",
     "0x1",
-    "0xe",
+    "0x4",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
@@ -870,7 +906,7 @@
     "0x21",
     "0x22",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x1c",
     "0x1",
@@ -885,7 +921,7 @@
     "0xffffffffffffffff",
     "0x1",
     "0x26",
-    "0x37",
+    "0x3a",
     "0x1",
     "0x27",
     "0x0",
@@ -922,24 +958,48 @@
     "0x29",
     "0x1",
     "0xffffffffffffffff",
-    "0x1",
+    "0x2",
     "0x2a",
+    "0x2b",
     "0x0",
     "0x26",
     "0x1",
     "0x2a",
     "0x1",
     "0xffffffffffffffff",
+    "0x0",
+    "0x0",
+    "0x27",
     "0x1",
     "0x2b",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x2c",
     "0x0",
-    "0xa",
+    "0x28",
+    "0x1",
+    "0x2c",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x2d",
+    "0x0",
+    "0x29",
+    "0x1",
+    "0x2d",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x2e",
+    "0x0",
+    "0x9",
     "0x1",
     "0x1c",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2c",
+    "0x2f",
     "0x0",
     "0x1e",
     "0x1",
@@ -947,7 +1007,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2d",
+    "0x30",
     "0x0",
     "0x1f",
     "0x1",
@@ -955,21 +1015,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2e",
+    "0x31",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x2b",
+    "0x2e",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2f",
+    "0x32",
     "0x1",
     "0x4",
-    "0x2c",
-    "0x2d",
-    "0x2e",
     "0x2f",
+    "0x30",
+    "0x31",
+    "0x32",
     "0x0",
     "0x6",
     "0x0",
@@ -977,21 +1037,21 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
     "0x27",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x30",
+    "0x33",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x1c",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x31",
+    "0x34",
     "0x0",
     "0x1e",
     "0x1",
@@ -999,7 +1059,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x32",
+    "0x35",
     "0x0",
     "0x1f",
     "0x1",
@@ -1007,21 +1067,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x33",
+    "0x36",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x30",
+    "0x33",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x34",
+    "0x37",
     "0x1",
     "0x4",
-    "0x31",
-    "0x32",
-    "0x33",
     "0x34",
+    "0x35",
+    "0x36",
+    "0x37",
     "0x0",
     "0x6",
     "0x0",
@@ -1029,9 +1089,9 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x29",
+    "0x2c",
     "0x1",
-    "0xe",
+    "0x4",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
@@ -1041,47 +1101,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x35",
+    "0x38",
     "0x0",
-    "0x2a",
+    "0x2d",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x36",
+    "0x39",
     "0x0",
     "0x20",
     "0x1",
-    "0x36",
+    "0x39",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x36",
+    "0x39",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x35",
-    "0x36",
+    "0x38",
+    "0x39",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x37",
+    "0x3a",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x37",
+    "0x3a",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x38",
+    "0x3b",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x1e",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x39",
+    "0x3c",
     "0x0",
     "0x1e",
     "0x1",
@@ -1089,7 +1149,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3a",
+    "0x3d",
     "0x0",
     "0x1f",
     "0x1",
@@ -1097,21 +1157,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3b",
+    "0x3e",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x38",
+    "0x3b",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3c",
+    "0x3f",
     "0x1",
     "0x4",
-    "0x39",
-    "0x3a",
-    "0x3b",
     "0x3c",
+    "0x3d",
+    "0x3e",
+    "0x3f",
     "0x0",
     "0x6",
     "0x0",
@@ -1126,9 +1186,9 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x29",
+    "0x2c",
     "0x1",
-    "0xe",
+    "0x4",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
@@ -1139,20 +1199,20 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3f",
+    "0x42",
     "0x0",
-    "0x2c",
+    "0x2f",
     "0x1",
-    "0x3f",
+    "0x42",
     "0x1",
     "0xffffffffffffffff",
     "0x2",
-    "0x3d",
-    "0x3e",
+    "0x40",
+    "0x41",
     "0x0",
     "0x1a",
     "0x1",
-    "0x3e",
+    "0x41",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
@@ -1162,47 +1222,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x40",
+    "0x43",
     "0x0",
-    "0x2d",
+    "0x30",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x41",
+    "0x44",
     "0x0",
     "0x20",
     "0x1",
-    "0x41",
+    "0x44",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x41",
+    "0x44",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x40",
-    "0x41",
+    "0x43",
+    "0x44",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x42",
+    "0x45",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x42",
+    "0x45",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x43",
+    "0x46",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x6",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x44",
+    "0x47",
     "0x0",
     "0x1e",
     "0x1",
@@ -1210,29 +1270,29 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x45",
+    "0x48",
     "0x0",
     "0x1f",
     "0x1",
-    "0x3d",
+    "0x40",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x46",
+    "0x49",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x43",
+    "0x46",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x47",
+    "0x4a",
     "0x1",
     "0x4",
-    "0x44",
-    "0x45",
-    "0x46",
     "0x47",
+    "0x48",
+    "0x49",
+    "0x4a",
     "0x0",
     "0x6",
     "0x0",
@@ -1240,14 +1300,21 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x2e",
+    "0x31",
     "0x1",
     "0xc",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x2f",
+    "0x32",
+    "0x1",
+    "0x5",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x0",
+    "0x0",
+    "0x33",
     "0x1",
     "0xf",
     "0x1",
@@ -1259,47 +1326,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x48",
+    "0x4b",
     "0x0",
-    "0x30",
+    "0x34",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x49",
+    "0x4c",
     "0x0",
     "0x20",
     "0x1",
-    "0x49",
+    "0x4c",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x49",
+    "0x4c",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x48",
-    "0x49",
+    "0x4b",
+    "0x4c",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4a",
+    "0x4d",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x4a",
+    "0x4d",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4b",
+    "0x4e",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x6",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4c",
+    "0x4f",
     "0x0",
     "0x1e",
     "0x1",
@@ -1307,7 +1374,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4d",
+    "0x50",
     "0x0",
     "0x1f",
     "0x1",
@@ -1315,21 +1382,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4e",
+    "0x51",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x4b",
+    "0x4e",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4f",
+    "0x52",
     "0x1",
     "0x4",
-    "0x4c",
-    "0x4d",
-    "0x4e",
     "0x4f",
+    "0x50",
+    "0x51",
+    "0x52",
     "0x0",
     "0x6",
     "0x0",
@@ -1337,28 +1404,28 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x31",
+    "0x32",
     "0x1",
     "0x5",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x2e",
+    "0x31",
     "0x1",
     "0x3",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x32",
+    "0x35",
     "0x1",
     "0x7",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x33",
+    "0x36",
     "0x1",
     "0x9",
     "0x1",
@@ -1370,47 +1437,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x50",
+    "0x53",
     "0x0",
-    "0x2a",
+    "0x2d",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x51",
+    "0x54",
     "0x0",
     "0x20",
     "0x1",
-    "0x51",
+    "0x54",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x51",
+    "0x54",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x50",
-    "0x51",
+    "0x53",
+    "0x54",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x52",
+    "0x55",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x52",
+    "0x55",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x53",
+    "0x56",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0xa",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x54",
+    "0x57",
     "0x0",
     "0x1e",
     "0x1",
@@ -1418,7 +1485,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x55",
+    "0x58",
     "0x0",
     "0x1f",
     "0x1",
@@ -1426,21 +1493,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x56",
+    "0x59",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x53",
+    "0x56",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x57",
+    "0x5a",
     "0x1",
     "0x4",
-    "0x54",
-    "0x55",
-    "0x56",
     "0x57",
+    "0x58",
+    "0x59",
+    "0x5a",
     "0x0",
     "0x1",
     "0x0",
@@ -1477,7 +1544,7 @@
     "0x2",
     "0x4",
     "0x6",
-    "0xca",
+    "0xd1",
     "0x2",
     "0x8",
     "0x9",
@@ -1488,7 +1555,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0xe",
+    "0xd",
     "0x1",
     "0x3",
     "0x1",
@@ -1496,7 +1563,7 @@
     "0x1",
     "0xa",
     "0x0",
-    "0xf",
+    "0xe",
     "0x1",
     "0xa",
     "0x1",
@@ -1504,14 +1571,14 @@
     "0x1",
     "0xb",
     "0x0",
-    "0x10",
+    "0xf",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0xc",
     "0x0",
-    "0x11",
+    "0x10",
     "0x1",
     "0xb",
     "0x1",
@@ -1519,7 +1586,7 @@
     "0x1",
     "0xb",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x4",
     "0x1",
@@ -1527,7 +1594,7 @@
     "0x1",
     "0x4",
     "0x0",
-    "0xb",
+    "0xa",
     "0x2",
     "0x7",
     "0x6",
@@ -1536,7 +1603,7 @@
     "0x1",
     "0x6",
     "0x0",
-    "0xc",
+    "0xb",
     "0x2",
     "0x5",
     "0x4",
@@ -1552,7 +1619,7 @@
     "0x2",
     "0xffffffffffffffff",
     "0x0",
-    "0x89",
+    "0x8d",
     "0x0",
     "0x0",
     "0x6",
@@ -1587,7 +1654,7 @@
     "0x16",
     "0x0",
     "0x1",
-    "0x8d",
+    "0x91",
     "0x0",
     "0x0",
     "0x6",
@@ -1642,7 +1709,7 @@
     "0xffffffffffffffff",
     "0x1",
     "0x13",
-    "0xbb",
+    "0xc2",
     "0x1",
     "0x14",
     "0x0",
@@ -1684,7 +1751,7 @@
     "0x2",
     "0x16",
     "0x17",
-    "0xb0",
+    "0xb7",
     "0x2",
     "0x18",
     "0x19",
@@ -1711,7 +1778,7 @@
     "0x1",
     "0x1e",
     "0x0",
-    "0x34",
+    "0x37",
     "0x2",
     "0x1d",
     "0x1e",
@@ -1722,7 +1789,7 @@
     "0x1b",
     "0x1c",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x16",
     "0x1",
@@ -1730,14 +1797,14 @@
     "0x1",
     "0x16",
     "0x0",
-    "0x35",
+    "0x38",
     "0x1",
     "0x1c",
     "0x2",
     "0xffffffffffffffff",
     "0x1",
     "0x1f",
-    "0xa9",
+    "0xb0",
     "0x1",
     "0x20",
     "0x0",
@@ -1747,7 +1814,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x36",
+    "0x39",
     "0x1",
     "0x1f",
     "0x1",
@@ -1762,7 +1829,7 @@
     "0x1",
     "0x22",
     "0x0",
-    "0x37",
+    "0x3a",
     "0x1",
     "0x22",
     "0x1",
@@ -1778,7 +1845,7 @@
     "0x1",
     "0x26",
     "0x0",
-    "0x38",
+    "0x3b",
     "0x2",
     "0x25",
     "0x26",
@@ -1800,24 +1867,48 @@
     "0x23",
     "0x1",
     "0xffffffffffffffff",
-    "0x1",
+    "0x2",
     "0x27",
+    "0x28",
     "0x0",
     "0x26",
     "0x1",
     "0x27",
     "0x1",
     "0xffffffffffffffff",
+    "0x0",
+    "0x0",
+    "0x27",
     "0x1",
     "0x28",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x29",
     "0x0",
-    "0xa",
+    "0x28",
     "0x1",
-    "0x16",
+    "0x29",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
+    "0x2a",
+    "0x0",
     "0x29",
+    "0x1",
+    "0x2a",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x2b",
+    "0x0",
+    "0x9",
+    "0x1",
+    "0x16",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x2c",
     "0x0",
     "0x1e",
     "0x1",
@@ -1825,7 +1916,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2a",
+    "0x2d",
     "0x0",
     "0x1f",
     "0x1",
@@ -1833,21 +1924,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2b",
+    "0x2e",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x28",
+    "0x2b",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2c",
+    "0x2f",
     "0x1",
     "0x4",
-    "0x29",
-    "0x2a",
-    "0x2b",
     "0x2c",
+    "0x2d",
+    "0x2e",
+    "0x2f",
     "0x0",
     "0x6",
     "0x0",
@@ -1855,21 +1946,21 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
     "0x20",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2d",
+    "0x30",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x16",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2e",
+    "0x31",
     "0x0",
     "0x1e",
     "0x1",
@@ -1877,7 +1968,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x2f",
+    "0x32",
     "0x0",
     "0x1f",
     "0x1",
@@ -1885,21 +1976,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x30",
+    "0x33",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x2d",
+    "0x30",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x31",
+    "0x34",
     "0x1",
     "0x4",
-    "0x2e",
-    "0x2f",
-    "0x30",
     "0x31",
+    "0x32",
+    "0x33",
+    "0x34",
     "0x0",
     "0x6",
     "0x0",
@@ -1912,47 +2003,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x32",
+    "0x35",
     "0x0",
-    "0x2a",
+    "0x2d",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x33",
+    "0x36",
     "0x0",
     "0x20",
     "0x1",
-    "0x33",
+    "0x36",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x33",
+    "0x36",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x32",
-    "0x33",
+    "0x35",
+    "0x36",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x34",
+    "0x37",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x34",
+    "0x37",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x35",
+    "0x38",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x18",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x36",
+    "0x39",
     "0x0",
     "0x1e",
     "0x1",
@@ -1960,7 +2051,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x37",
+    "0x3a",
     "0x0",
     "0x1f",
     "0x1",
@@ -1968,21 +2059,21 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x38",
+    "0x3b",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x35",
+    "0x38",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x39",
+    "0x3c",
     "0x1",
     "0x4",
-    "0x36",
-    "0x37",
-    "0x38",
     "0x39",
+    "0x3a",
+    "0x3b",
+    "0x3c",
     "0x0",
     "0x6",
     "0x0",
@@ -2003,20 +2094,20 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3c",
+    "0x3f",
     "0x0",
-    "0x2c",
+    "0x2f",
     "0x1",
-    "0x3c",
+    "0x3f",
     "0x1",
     "0xffffffffffffffff",
     "0x2",
-    "0x3a",
-    "0x3b",
+    "0x3d",
+    "0x3e",
     "0x0",
     "0x1a",
     "0x1",
-    "0x3b",
+    "0x3e",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
@@ -2026,47 +2117,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3d",
+    "0x40",
     "0x0",
-    "0x2d",
+    "0x30",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3e",
+    "0x41",
     "0x0",
     "0x20",
     "0x1",
-    "0x3e",
+    "0x41",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3e",
+    "0x41",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x3d",
-    "0x3e",
+    "0x40",
+    "0x41",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3f",
+    "0x42",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x3f",
+    "0x42",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x40",
+    "0x43",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x4",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x41",
+    "0x44",
     "0x0",
     "0x1e",
     "0x1",
@@ -2074,51 +2165,51 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x42",
+    "0x45",
     "0x0",
     "0x1f",
     "0x1",
-    "0x3a",
+    "0x3d",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x43",
+    "0x46",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x40",
+    "0x43",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x44",
+    "0x47",
     "0x1",
     "0x4",
-    "0x41",
-    "0x42",
-    "0x43",
     "0x44",
+    "0x45",
+    "0x46",
+    "0x47",
+    "0x0",
+    "0x6",
     "0x0",
-    "0x6",
-    "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x2e",
+    "0x31",
     "0x1",
     "0x3",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x32",
+    "0x35",
     "0x1",
     "0x5",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x33",
+    "0x36",
     "0x1",
     "0x7",
     "0x1",
@@ -2130,47 +2221,47 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x45",
+    "0x48",
     "0x0",
-    "0x2a",
+    "0x2d",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x46",
+    "0x49",
     "0x0",
     "0x20",
     "0x1",
-    "0x46",
+    "0x49",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x46",
+    "0x49",
     "0x0",
-    "0x2b",
+    "0x2e",
     "0x2",
-    "0x45",
-    "0x46",
+    "0x48",
+    "0x49",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x47",
+    "0x4a",
     "0x0",
-    "0x28",
+    "0x2b",
     "0x1",
-    "0x47",
+    "0x4a",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x48",
+    "0x4b",
     "0x0",
-    "0xa",
+    "0x9",
     "0x1",
     "0x8",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x49",
+    "0x4c",
     "0x0",
     "0x1e",
     "0x1",
@@ -2178,7 +2269,7 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4a",
+    "0x4d",
     "0x0",
     "0x1f",
     "0x1",
@@ -2186,23 +2277,23 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4b",
+    "0x4e",
     "0x0",
-    "0x27",
+    "0x2a",
     "0x1",
-    "0x48",
+    "0x4b",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x4c",
+    "0x4f",
     "0x1",
     "0x4",
-    "0x49",
-    "0x4a",
-    "0x4b",
     "0x4c",
+    "0x4d",
+    "0x4e",
+    "0x4f",
     "0x0",
-    "0xe",
+    "0xd",
     "0x1",
     "0x0",
     "0x1",
@@ -2210,7 +2301,7 @@
     "0x1",
     "0x1",
     "0x0",
-    "0x39",
+    "0x3c",
     "0x1",
     "0x1",
     "0x2",
@@ -2218,7 +2309,7 @@
     "0x2",
     "0x2",
     "0x3",
-    "0xdf",
+    "0xe6",
     "0x1",
     "0x4",
     "0x0",
@@ -2228,7 +2319,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x3a",
+    "0x3d",
     "0x1",
     "0x3",
     "0x1",
@@ -2236,7 +2327,7 @@
     "0x1",
     "0x5",
     "0x0",
-    "0x3b",
+    "0x3e",
     "0x1",
     "0x2",
     "0x1",
@@ -2244,7 +2335,7 @@
     "0x1",
     "0x6",
     "0x0",
-    "0x3c",
+    "0x3f",
     "0x1",
     "0x5",
     "0x1",
@@ -2255,7 +2346,7 @@
     "0x16",
     "0x0",
     "0x1",
-    "0xe4",
+    "0xeb",
     "0x0",
     "0x0",
     "0x6",
@@ -2271,7 +2362,7 @@
     "0x1",
     "0x8",
     "0x0",
-    "0x3d",
+    "0x40",
     "0x1",
     "0x8",
     "0x1",
@@ -2279,7 +2370,7 @@
     "0x1",
     "0x9",
     "0x0",
-    "0x3b",
+    "0x3e",
     "0x1",
     "0x4",
     "0x1",
@@ -2287,7 +2378,7 @@
     "0x1",
     "0x6",
     "0x0",
-    "0x3c",
+    "0x3f",
     "0x1",
     "0x9",
     "0x1",
@@ -2295,7 +2386,7 @@
     "0x1",
     "0x7",
     "0x0",
-    "0x3e",
+    "0x27",
     "0x1",
     "0x6",
     "0x1",
@@ -2311,14 +2402,14 @@
     "0x1",
     "0xa",
     "0x0",
-    "0x3f",
+    "0x41",
     "0x1",
     "0x7",
     "0x2",
     "0xffffffffffffffff",
     "0x1",
     "0xb",
-    "0xed",
+    "0xf3",
     "0x1",
     "0xc",
     "0x0",
@@ -2328,7 +2419,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x40",
+    "0x42",
     "0x1",
     "0xb",
     "0x1",
@@ -2336,7 +2427,7 @@
     "0x1",
     "0xd",
     "0x0",
-    "0x41",
+    "0x43",
     "0x1",
     "0xd",
     "0x1",
@@ -2344,25 +2435,66 @@
     "0x1",
     "0xe",
     "0x0",
-    "0x7",
+    "0x44",
     "0x1",
-    "0xa",
+    "0xe",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0xf",
     "0x0",
-    "0x42",
+    "0x16",
+    "0x0",
     "0x1",
-    "0xe",
+    "0xf8",
+    "0x0",
+    "0x0",
+    "0x6",
+    "0x0",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x0",
+    "0x0",
+    "0x1a",
+    "0x1",
+    "0xc",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x0",
+    "0x0",
+    "0x13",
+    "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0x10",
+    "0x0",
+    "0x45",
     "0x1",
-    "0x2",
-    "0xf",
     "0x10",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x11",
+    "0x0",
+    "0x44",
+    "0x1",
+    "0x11",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0xf",
+    "0x0",
+    "0x46",
+    "0x1",
+    "0xf",
+    "0x2",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x12",
+    "0xff",
+    "0x1",
+    "0x13",
     "0x0",
     "0x6",
     "0x0",
@@ -2370,13 +2502,21 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x43",
+    "0x47",
     "0x1",
-    "0xc",
+    "0x12",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x11",
+    "0x14",
+    "0x0",
+    "0x48",
+    "0x1",
+    "0x14",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x15",
     "0x0",
     "0x7",
     "0x1",
@@ -2384,19 +2524,53 @@
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x12",
+    "0x16",
     "0x0",
-    "0x42",
+    "0x49",
     "0x1",
-    "0x11",
+    "0x15",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x13",
+    "0x17",
     "0x1",
     "0x2",
-    "0x12",
+    "0x16",
+    "0x17",
+    "0x0",
+    "0x6",
+    "0x0",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x0",
+    "0x0",
+    "0x4a",
+    "0x1",
     "0x13",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x18",
+    "0x0",
+    "0x7",
+    "0x1",
+    "0xa",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x19",
+    "0x0",
+    "0x49",
+    "0x1",
+    "0x18",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x1a",
+    "0x1",
+    "0x2",
+    "0x19",
+    "0x1a",
     "0x0",
     "0x1e",
     "0x1",
@@ -2414,7 +2588,7 @@
     "0x1",
     "0x7",
     "0x0",
-    "0x44",
+    "0x37",
     "0x2",
     "0x6",
     "0x7",
@@ -2425,14 +2599,14 @@
     "0x4",
     "0x5",
     "0x0",
-    "0x35",
+    "0x38",
     "0x1",
     "0x5",
     "0x2",
     "0xffffffffffffffff",
     "0x1",
     "0x8",
-    "0x10e",
+    "0x120",
     "0x1",
     "0x9",
     "0x0",
@@ -2442,7 +2616,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x36",
+    "0x39",
     "0x1",
     "0x8",
     "0x1",
@@ -2450,7 +2624,7 @@
     "0x1",
     "0xa",
     "0x0",
-    "0x45",
+    "0x4b",
     "0x2",
     "0xa",
     "0x2",
@@ -2483,7 +2657,7 @@
     "0x1",
     "0x11",
     "0x0",
-    "0x46",
+    "0x4c",
     "0x3",
     "0xf",
     "0x10",
@@ -2502,7 +2676,7 @@
     "0xffffffffffffffff",
     "0x1",
     "0x12",
-    "0x108",
+    "0x11a",
     "0x1",
     "0x13",
     "0x0",
@@ -2534,7 +2708,7 @@
     "0x1",
     "0x15",
     "0x0",
-    "0x47",
+    "0x4d",
     "0x1",
     "0x15",
     "0x1",
@@ -2542,7 +2716,7 @@
     "0x1",
     "0x16",
     "0x0",
-    "0x48",
+    "0x4e",
     "0x1",
     "0x16",
     "0x1",
@@ -2566,7 +2740,7 @@
     "0x1",
     "0x19",
     "0x0",
-    "0x49",
+    "0x4f",
     "0x1",
     "0x17",
     "0x1",
@@ -2585,7 +2759,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4a",
+    "0x50",
     "0x1",
     "0x13",
     "0x1",
@@ -2609,7 +2783,7 @@
     "0x1",
     "0x1d",
     "0x0",
-    "0x49",
+    "0x4f",
     "0x1",
     "0x1b",
     "0x1",
@@ -2628,282 +2802,92 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x29",
-    "0x1",
-    "0x2",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x0",
-    "0x0",
-    "0x4a",
-    "0x1",
-    "0x9",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x1f",
-    "0x0",
-    "0x1e",
-    "0x1",
-    "0x3",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x20",
-    "0x0",
-    "0x1f",
-    "0x1",
-    "0x4",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x21",
-    "0x0",
-    "0x49",
-    "0x1",
-    "0x1f",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x22",
-    "0x1",
-    "0x3",
-    "0x20",
-    "0x21",
-    "0x22",
-    "0x0",
-    "0x13",
-    "0x0",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x1",
-    "0x0",
-    "0x1f",
-    "0x1",
-    "0x0",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x2",
-    "0x0",
-    "0x4b",
-    "0x1",
-    "0x1",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x3",
-    "0x1",
-    "0x2",
-    "0x2",
-    "0x3",
-    "0x0",
-    "0x1e",
-    "0x1",
-    "0x0",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x5",
-    "0x0",
-    "0x1f",
-    "0x1",
-    "0x1",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x6",
-    "0x0",
-    "0x44",
-    "0x2",
-    "0x5",
-    "0x6",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x3",
-    "0x2",
-    "0x3",
-    "0x4",
-    "0x0",
-    "0x35",
-    "0x1",
-    "0x4",
-    "0x2",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x7",
-    "0x125",
-    "0x1",
-    "0x8",
-    "0x0",
-    "0x6",
-    "0x0",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x0",
-    "0x0",
-    "0x36",
-    "0x1",
-    "0x7",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x9",
-    "0x0",
-    "0x4c",
-    "0x1",
-    "0x9",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0xa",
-    "0x0",
-    "0x4d",
-    "0x1",
-    "0xa",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0xb",
-    "0x0",
-    "0x1e",
-    "0x1",
-    "0x2",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0xc",
-    "0x0",
-    "0x1f",
-    "0x1",
-    "0x3",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0xd",
-    "0x0",
-    "0x4e",
-    "0x1",
-    "0xb",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0xe",
+    "0x2c",
     "0x1",
-    "0x3",
-    "0xc",
-    "0xd",
-    "0xe",
-    "0x0",
-    "0x6",
-    "0x0",
+    "0x2",
     "0x1",
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4f",
+    "0x50",
     "0x1",
-    "0x8",
+    "0x9",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0xf",
+    "0x1f",
     "0x0",
     "0x1e",
     "0x1",
-    "0x2",
+    "0x3",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x10",
+    "0x20",
     "0x0",
     "0x1f",
     "0x1",
-    "0x3",
+    "0x4",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x11",
+    "0x21",
     "0x0",
-    "0x4e",
+    "0x4f",
     "0x1",
-    "0xf",
+    "0x1f",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x12",
+    "0x22",
     "0x1",
     "0x3",
-    "0x10",
-    "0x11",
-    "0x12",
-    "0x0",
-    "0x2b",
-    "0x2",
-    "0x0",
-    "0x1",
-    "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x2",
+    "0x20",
+    "0x21",
+    "0x22",
     "0x0",
     "0x13",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x3",
-    "0x0",
-    "0x1a",
-    "0x1",
-    "0x3",
     "0x1",
-    "0xffffffffffffffff",
-    "0x0",
-    "0x0",
-    "0x13",
     "0x0",
+    "0x1f",
     "0x1",
-    "0xffffffffffffffff",
-    "0x1",
-    "0x4",
     "0x0",
-    "0x37",
-    "0x1",
-    "0x2",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x5",
+    "0x2",
     "0x0",
-    "0x4b",
+    "0x51",
+    "0x1",
     "0x1",
-    "0x4",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
-    "0x6",
+    "0x3",
     "0x1",
     "0x2",
-    "0x5",
-    "0x6",
+    "0x2",
+    "0x3",
     "0x0",
-    "0x50",
+    "0xf",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0x2",
     "0x0",
-    "0x51",
+    "0x52",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0x3",
     "0x0",
-    "0x52",
+    "0x53",
     "0x1",
     "0x3",
     "0x1",
@@ -2911,7 +2895,7 @@
     "0x1",
     "0x4",
     "0x0",
-    "0x20",
+    "0x10",
     "0x1",
     "0x2",
     "0x1",
@@ -2919,7 +2903,7 @@
     "0x1",
     "0x2",
     "0x0",
-    "0x53",
+    "0x54",
     "0x1",
     "0x4",
     "0x1",
@@ -2927,7 +2911,7 @@
     "0x1",
     "0x4",
     "0x0",
-    "0x54",
+    "0x55",
     "0x4",
     "0x0",
     "0x1",
@@ -2939,7 +2923,7 @@
     "0x5",
     "0x6",
     "0x7",
-    "0x13e",
+    "0x137",
     "0x3",
     "0x8",
     "0x9",
@@ -2951,7 +2935,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x55",
+    "0x56",
     "0x1",
     "0x7",
     "0x1",
@@ -2975,7 +2959,7 @@
     "0x1",
     "0xd",
     "0x0",
-    "0x56",
+    "0x57",
     "0x1",
     "0xb",
     "0x1",
@@ -2986,7 +2970,7 @@
     "0x16",
     "0x0",
     "0x1",
-    "0x143",
+    "0x13c",
     "0x0",
     "0x0",
     "0x6",
@@ -2995,7 +2979,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x57",
+    "0x58",
     "0x1",
     "0xa",
     "0x1",
@@ -3019,7 +3003,7 @@
     "0x1",
     "0xd",
     "0x0",
-    "0x56",
+    "0x57",
     "0x1",
     "0xf",
     "0x1",
@@ -3027,7 +3011,7 @@
     "0x1",
     "0xe",
     "0x0",
-    "0x58",
+    "0x59",
     "0x1",
     "0xe",
     "0x1",
@@ -3035,7 +3019,7 @@
     "0x1",
     "0x11",
     "0x0",
-    "0x59",
+    "0x5a",
     "0x1",
     "0x11",
     "0x1",
@@ -3043,14 +3027,14 @@
     "0x1",
     "0x10",
     "0x0",
-    "0x35",
+    "0x38",
     "0x1",
     "0x10",
     "0x2",
     "0xffffffffffffffff",
     "0x1",
     "0x12",
-    "0x14e",
+    "0x147",
     "0x1",
     "0x13",
     "0x0",
@@ -3060,7 +3044,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x36",
+    "0x39",
     "0x1",
     "0x12",
     "0x1",
@@ -3068,7 +3052,7 @@
     "0x1",
     "0x14",
     "0x0",
-    "0x4c",
+    "0x5b",
     "0x1",
     "0x14",
     "0x1",
@@ -3076,7 +3060,7 @@
     "0x1",
     "0x15",
     "0x0",
-    "0x4d",
+    "0x5c",
     "0x1",
     "0x15",
     "0x1",
@@ -3100,7 +3084,7 @@
     "0x1",
     "0x18",
     "0x0",
-    "0x4e",
+    "0x5d",
     "0x1",
     "0x16",
     "0x1",
@@ -3119,7 +3103,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4f",
+    "0x5e",
     "0x1",
     "0x13",
     "0x1",
@@ -3143,7 +3127,7 @@
     "0x1",
     "0x1c",
     "0x0",
-    "0x4e",
+    "0x5d",
     "0x1",
     "0x1a",
     "0x1",
@@ -3156,21 +3140,71 @@
     "0x1c",
     "0x1d",
     "0x0",
-    "0x50",
+    "0x2e",
+    "0x2",
+    "0x0",
+    "0x1",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x2",
+    "0x0",
+    "0x13",
     "0x0",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
     "0x3",
     "0x0",
-    "0x51",
+    "0x1a",
+    "0x1",
+    "0x3",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x0",
     "0x0",
+    "0x13",
+    "0x0",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x4",
+    "0x0",
+    "0x3a",
+    "0x1",
+    "0x2",
     "0x1",
     "0xffffffffffffffff",
     "0x1",
+    "0x5",
+    "0x0",
+    "0x51",
+    "0x1",
     "0x4",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x6",
+    "0x1",
+    "0x2",
+    "0x5",
+    "0x6",
+    "0x0",
+    "0xf",
+    "0x0",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x3",
     "0x0",
     "0x52",
+    "0x0",
+    "0x1",
+    "0xffffffffffffffff",
+    "0x1",
+    "0x4",
+    "0x0",
+    "0x53",
     "0x1",
     "0x4",
     "0x1",
@@ -3178,7 +3212,7 @@
     "0x1",
     "0x5",
     "0x0",
-    "0x20",
+    "0x10",
     "0x1",
     "0x3",
     "0x1",
@@ -3186,7 +3220,7 @@
     "0x1",
     "0x3",
     "0x0",
-    "0x53",
+    "0x54",
     "0x1",
     "0x5",
     "0x1",
@@ -3194,7 +3228,7 @@
     "0x1",
     "0x5",
     "0x0",
-    "0x5a",
+    "0x5f",
     "0x5",
     "0x0",
     "0x1",
@@ -3225,7 +3259,7 @@
     "0x1",
     "0xb",
     "0x0",
-    "0x5b",
+    "0x60",
     "0x1",
     "0xb",
     "0x1",
@@ -3249,7 +3283,7 @@
     "0x1",
     "0xe",
     "0x0",
-    "0x5c",
+    "0x61",
     "0x1",
     "0xc",
     "0x1",
@@ -3269,7 +3303,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x5d",
+    "0x62",
     "0x1",
     "0xa",
     "0x1",
@@ -3293,7 +3327,7 @@
     "0x1",
     "0xe",
     "0x0",
-    "0x5c",
+    "0x61",
     "0x1",
     "0x10",
     "0x1",
@@ -3301,7 +3335,7 @@
     "0x1",
     "0xf",
     "0x0",
-    "0x5e",
+    "0x63",
     "0x1",
     "0xf",
     "0x1",
@@ -3309,7 +3343,7 @@
     "0x1",
     "0x12",
     "0x0",
-    "0x5f",
+    "0x64",
     "0x1",
     "0x12",
     "0x1",
@@ -3342,7 +3376,7 @@
     "0x1",
     "0x15",
     "0x0",
-    "0x47",
+    "0x4d",
     "0x1",
     "0x15",
     "0x1",
@@ -3350,7 +3384,7 @@
     "0x1",
     "0x16",
     "0x0",
-    "0x48",
+    "0x4e",
     "0x1",
     "0x16",
     "0x1",
@@ -3374,7 +3408,7 @@
     "0x1",
     "0x19",
     "0x0",
-    "0x49",
+    "0x4f",
     "0x1",
     "0x17",
     "0x1",
@@ -3393,7 +3427,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4a",
+    "0x50",
     "0x1",
     "0x14",
     "0x1",
@@ -3417,7 +3451,7 @@
     "0x1",
     "0x1d",
     "0x0",
-    "0x49",
+    "0x4f",
     "0x1",
     "0x1b",
     "0x1",
@@ -3430,7 +3464,7 @@
     "0x1d",
     "0x1e",
     "0x0",
-    "0x60",
+    "0x65",
     "0x1",
     "0x0",
     "0x2",
@@ -3447,7 +3481,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4c",
+    "0x5b",
     "0x1",
     "0x1",
     "0x1",
@@ -3455,7 +3489,7 @@
     "0x1",
     "0x3",
     "0x0",
-    "0x4d",
+    "0x5c",
     "0x1",
     "0x3",
     "0x1",
@@ -3463,7 +3497,7 @@
     "0x1",
     "0x4",
     "0x0",
-    "0x4e",
+    "0x5d",
     "0x1",
     "0x4",
     "0x1",
@@ -3480,7 +3514,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4f",
+    "0x5e",
     "0x1",
     "0x2",
     "0x1",
@@ -3488,7 +3522,7 @@
     "0x1",
     "0x6",
     "0x0",
-    "0x4e",
+    "0x5d",
     "0x1",
     "0x6",
     "0x1",
@@ -3499,7 +3533,7 @@
     "0x1",
     "0x7",
     "0x0",
-    "0x61",
+    "0x66",
     "0x1",
     "0x0",
     "0x2",
@@ -3516,7 +3550,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x47",
+    "0x4d",
     "0x1",
     "0x1",
     "0x1",
@@ -3524,7 +3558,7 @@
     "0x1",
     "0x3",
     "0x0",
-    "0x48",
+    "0x4e",
     "0x1",
     "0x3",
     "0x1",
@@ -3532,7 +3566,7 @@
     "0x1",
     "0x4",
     "0x0",
-    "0x49",
+    "0x4f",
     "0x1",
     "0x4",
     "0x1",
@@ -3549,7 +3583,7 @@
     "0xffffffffffffffff",
     "0x0",
     "0x0",
-    "0x4a",
+    "0x50",
     "0x1",
     "0x2",
     "0x1",
@@ -3557,7 +3591,7 @@
     "0x1",
     "0x6",
     "0x0",
-    "0x49",
+    "0x4f",
     "0x1",
     "0x6",
     "0x1",
@@ -3567,15 +3601,15 @@
     "0x1",
     "0x1",
     "0x7",
-    "0xb",
+    "0xa",
     "0x4",
+    "0x2",
     "0x4",
-    "0x6",
     "0xe",
-    "0xa",
+    "0x8",
     "0x4",
+    "0x2",
     "0x4",
-    "0x6",
     "0xe",
     "0x12",
     "0x0",
@@ -3584,81 +3618,71 @@
     "0x3",
     "0x0",
     "0x4",
+    "0x2",
     "0x4",
-    "0x6",
     "0xe",
-    "0xa",
+    "0x8",
     "0x4",
+    "0x2",
     "0x4",
-    "0x6",
     "0xe",
     "0x12",
     "0x0",
     "0x1",
     "0x2",
     "0x3",
-    "0x76",
+    "0x7a",
     "0x1",
-    "0xa",
+    "0x8",
     "0x2",
+    "0x8",
     "0xa",
-    "0x2",
     "0x0",
-    "0xd8",
+    "0xdf",
     "0x3",
-    "0x6",
+    "0x4",
     "0xe",
     "0x0",
     "0x3",
-    "0x6",
+    "0x4",
     "0xe",
     "0x10",
     "0x0",
     "0x1",
     "0x2",
-    "0xf2",
+    "0x104",
     "0x1",
     "0xe",
     "0x2",
     "0xe",
-    "0x1",
+    "0x9",
     "0x0",
-    "0x115",
+    "0x127",
     "0x2",
-    "0x6",
+    "0x4",
     "0xe",
     "0x3",
-    "0x6",
+    "0x4",
     "0xe",
     "0x14",
     "0x0",
     "0x1",
-    "0x119",
-    "0x2",
-    "0x8",
-    "0x0",
-    "0x2",
-    "0x8",
-    "0x1",
-    "0x0",
-    "0x1",
     "0x12b",
     "0x2",
     "0x6",
-    "0xe",
-    "0x3",
+    "0x0",
+    "0x2",
     "0x6",
-    "0xe",
-    "0x14",
+    "0x9",
     "0x0",
     "0x1",
-    "0x132",
+    "0x14d",
     "0x3",
-    "0x6",
+    "0x4",
     "0xe",
     "0x0",
     "0x3",
-    "0x6",
+    "0x4",
     "0xe",
     "0x10",
     "0x0",
@@ -3666,13 +3690,13 @@
     "0x2",
     "0x154",
     "0x1",
-    "0x18",
+    "0x1a",
     "0x1",
     "0x14",
     "0x0",
     "0x177",
     "0x1",
-    "0x19",
+    "0x1b",
     "0x1",
     "0x10",
     "0x0",
@@ -3705,7 +3729,7 @@
       "inputs": [
         {
           "name": "amount",
-          "type": "core::felt"
+          "type": "core::felt252"
         }
       ],
       "outputs": [],
@@ -3717,7 +3741,7 @@
       "inputs": [],
       "outputs": [
         {
-          "type": "core::felt"
+          "type": "core::felt252"
         }
       ],
       "state_mutability": "view"
diff --git a/__mocks__/cairo/helloSierra/readme.md b/__mocks__/cairo/helloSierra/readme.md
new file mode 100644
index 00000000..0195face
--- /dev/null
+++ b/__mocks__/cairo/helloSierra/readme.md
@@ -0,0 +1,23 @@
+# 1.
+
+Download cairo repo
+Switch to target tag version alpha6
+`cargo test`
+
+# 1.1. Compile to Starknet Sierra json
+
+`cargo run --bin starknet-compile -- hello.cairo hello.json --add-pythonic-hints`
+
+# 1.2. Compile to Casm
+
+`cargo run --bin starknet-sierra-compile -- hello.json hello.casm --add-pythonic-hints`
+
+# 2. Get Compiled Class Hash & Class Hash
+
+pip install cairo-lang==0.11.0a2
+
+`python3 cch.py hello.casm`
+compiled class hash
+0x5c82c98f2ab111bd50293ba64bb18cf49037374783ad2486c712709c4ba0d89
+class hash
+0x345df0a9b35ce05d03772ba7938acad66921c5c39c1a5af74aee72aa25c363e
diff --git a/package-lock.json b/package-lock.json
index 27f9db3a..5c4384ea 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,6 @@
         "@noble/curves": "^0.8.2",
         "isomorphic-fetch": "^3.0.0",
         "json-bigint": "^1.0.0",
-        "json-keys-sort": "^2.1.0",
         "micro-starknet": "^0.2.1",
         "pako": "^2.0.4",
         "ts-custom-error": "^3.3.1",
@@ -9332,11 +9331,6 @@
         "bignumber.js": "^9.0.0"
       }
     },
-    "node_modules/json-keys-sort": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/json-keys-sort/-/json-keys-sort-2.1.0.tgz",
-      "integrity": "sha512-Xo8Ep77w1K+GZ2DZ7S74Pyjlgqr3RP2tgFPDinwl5Z6YOculeDUJKosPScNzEZkhCvDD4W81r3qY7cWN+n98RQ=="
-    },
     "node_modules/json-parse-better-errors": {
       "version": "1.0.2",
       "dev": true,
@@ -22028,11 +22022,6 @@
         "bignumber.js": "^9.0.0"
       }
     },
-    "json-keys-sort": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/json-keys-sort/-/json-keys-sort-2.1.0.tgz",
-      "integrity": "sha512-Xo8Ep77w1K+GZ2DZ7S74Pyjlgqr3RP2tgFPDinwl5Z6YOculeDUJKosPScNzEZkhCvDD4W81r3qY7cWN+n98RQ=="
-    },
     "json-parse-better-errors": {
       "version": "1.0.2",
       "dev": true
diff --git a/package.json b/package.json
index 45a2a4b2..8351249d 100644
--- a/package.json
+++ b/package.json
@@ -91,7 +91,6 @@
     "@noble/curves": "^0.8.2",
     "isomorphic-fetch": "^3.0.0",
     "json-bigint": "^1.0.0",
-    "json-keys-sort": "^2.1.0",
     "micro-starknet": "^0.2.1",
     "pako": "^2.0.4",
     "ts-custom-error": "^3.3.1",
diff --git a/src/account/default.ts b/src/account/default.ts
index 957aacbe..20ed2ffe 100644
--- a/src/account/default.ts
+++ b/src/account/default.ts
@@ -16,6 +16,7 @@ import {
   DeployAccountContractTransaction,
   DeployContractResponse,
   DeployContractUDCResponse,
+  Details,
   EstimateFee,
   EstimateFeeAction,
   EstimateFeeDetails,
@@ -31,13 +32,14 @@ import {
   UniversalDeployerContractPayload,
 } from '../types';
 import { EstimateFeeBulk, TransactionSimulation } from '../types/account';
+import { extractContractHashes, isSierra } from '../utils/contract';
 import { starkCurve } from '../utils/ec';
 import { parseUDCEvent } from '../utils/events';
 import {
   calculateContractAddressFromHash,
-  computeContractClassHash,
   feeTransactionVersion,
   transactionVersion,
+  transactionVersion_2,
 } from '../utils/hash';
 import { BigNumberish, toBigInt, toCairoBool, toHex } from '../utils/num';
 import { parseContract } from '../utils/provider';
@@ -77,7 +79,7 @@ export class Account extends Provider implements AccountInterface {
 
   public async estimateInvokeFee(
     calls: AllowArray<Call>,
-    { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}
+    { nonce: providedNonce, blockIdentifier, skipValidate }: EstimateFeeDetails = {}
   ): Promise<EstimateFee> {
     const transactions = Array.isArray(calls) ? calls : [calls];
     const nonce = toBigInt(providedNonce ?? (await this.getNonce()));
@@ -96,7 +98,8 @@ export class Account extends Provider implements AccountInterface {
     const response = await super.getInvokeEstimateFee(
       { ...invocation },
       { version, nonce },
-      blockIdentifier
+      blockIdentifier,
+      skipValidate
     );
 
     const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);
@@ -108,22 +111,23 @@ export class Account extends Provider implements AccountInterface {
   }
 
   public async estimateDeclareFee(
-    { contract, classHash: providedClassHash }: DeclareContractPayload,
-    { blockIdentifier, nonce: providedNonce }: EstimateFeeDetails = {}
+    { contract, classHash: providedClassHash, casm, compiledClassHash }: DeclareContractPayload,
+    { blockIdentifier, nonce: providedNonce, skipValidate }: EstimateFeeDetails = {}
   ): Promise<EstimateFee> {
     const nonce = toBigInt(providedNonce ?? (await this.getNonce()));
-    const version = toBigInt(feeTransactionVersion);
+    const version = !isSierra(contract) ? toBigInt(feeTransactionVersion) : transactionVersion_2;
     const chainId = await this.getChainId();
 
-    const payload = await this.buildDeclarePayload(
-      { classHash: providedClassHash, contract },
+    const declareContractTransaction = await this.buildDeclarePayload(
+      { classHash: providedClassHash, contract, casm, compiledClassHash },
       { nonce, chainId, version, walletAddress: this.address, maxFee: ZERO }
     );
 
     const response = await super.getDeclareEstimateFee(
-      { ...payload },
+      declareContractTransaction,
       { version, nonce },
-      blockIdentifier
+      blockIdentifier,
+      skipValidate
     );
     const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);
 
@@ -140,7 +144,7 @@ export class Account extends Provider implements AccountInterface {
       constructorCalldata = [],
       contractAddress: providedContractAddress,
     }: DeployAccountContractPayload,
-    { blockIdentifier }: EstimateFeeDetails = {}
+    { blockIdentifier, skipValidate }: EstimateFeeDetails = {}
   ): Promise<EstimateFee> {
     const version = toBigInt(feeTransactionVersion);
     const nonce = ZERO; // DEPLOY_ACCOUNT transaction will have a nonce zero as it is the first transaction in the account
@@ -154,7 +158,8 @@ export class Account extends Provider implements AccountInterface {
     const response = await super.getDeployAccountEstimateFee(
       { ...payload },
       { version, nonce },
-      blockIdentifier
+      blockIdentifier,
+      skipValidate
     );
     const suggestedMaxFee = estimatedFeeToMaxFee(response.overall_fee);
 
@@ -302,42 +307,31 @@ export class Account extends Provider implements AccountInterface {
   }
 
   public async declare(
-    { contract, classHash: providedClassHash }: DeclareContractPayload,
+    payload: DeclareContractPayload,
     transactionsDetail: InvocationsDetails = {}
   ): Promise<DeclareContractResponse> {
-    const nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));
+    const declareContractPayload = extractContractHashes(payload);
+    const details = {} as Details;
 
-    const classHash = providedClassHash ?? computeContractClassHash(contract);
-
-    const maxFee =
+    details.nonce = toBigInt(transactionsDetail.nonce ?? (await this.getNonce()));
+    details.maxFee =
       transactionsDetail.maxFee ??
       (await this.getSuggestedMaxFee(
-        { type: TransactionType.DECLARE, payload: { classHash, contract } }, // Provide the classHash to avoid re-computing it
+        {
+          type: TransactionType.DECLARE,
+          payload: declareContractPayload,
+        },
         transactionsDetail
       ));
+    details.version = !isSierra(payload.contract) ? transactionVersion : transactionVersion_2;
+    details.chainId = await this.getChainId();
 
-    const version = toBigInt(transactionVersion);
-    const chainId = await this.getChainId();
-
-    const signature = await this.signer.signDeclareTransaction({
-      classHash,
-      senderAddress: this.address,
-      chainId,
-      maxFee,
-      version,
-      nonce,
+    const declareContractTransaction = await this.buildDeclarePayload(declareContractPayload, {
+      ...details,
+      walletAddress: this.address,
     });
 
-    const contractDefinition = parseContract(contract);
-
-    return this.declareContract(
-      { contractDefinition, senderAddress: this.address, signature },
-      {
-        nonce,
-        maxFee,
-        version,
-      }
-    );
+    return this.declareContract(declareContractTransaction, details);
   }
 
   public async deploy(
@@ -521,14 +515,18 @@ export class Account extends Provider implements AccountInterface {
     return feeEstimate.suggestedMaxFee.toString();
   }
 
+  /**
+   * @deprecated will be renamed to buildDeclareContractTransaction
+   */
   public async buildDeclarePayload(
-    { classHash: providedClassHash, contract }: DeclareContractPayload,
+    payload: DeclareContractPayload,
     { nonce, chainId, version, walletAddress, maxFee }: InvocationsSignerDetails
   ): Promise<DeclareContractTransaction> {
+    const { classHash, contract, compiledClassHash } = extractContractHashes(payload);
     const contractDefinition = parseContract(contract);
-    const classHash = providedClassHash ?? computeContractClassHash(contract);
     const signature = await this.signer.signDeclareTransaction({
       classHash,
+      compiledClassHash,
       senderAddress: walletAddress,
       chainId,
       maxFee,
@@ -540,6 +538,7 @@ export class Account extends Provider implements AccountInterface {
       senderAddress: walletAddress,
       signature,
       contractDefinition,
+      compiledClassHash,
     };
   }
 
@@ -604,7 +603,7 @@ export class Account extends Provider implements AccountInterface {
 
   public async simulateTransaction(
     calls: AllowArray<Call>,
-    { nonce: providedNonce, blockIdentifier }: EstimateFeeDetails = {}
+    { nonce: providedNonce, blockIdentifier, skipValidate }: EstimateFeeDetails = {}
   ): Promise<TransactionSimulation> {
     const transactions = Array.isArray(calls) ? calls : [calls];
     const nonce = toBigInt(providedNonce ?? (await this.getNonce()));
@@ -623,7 +622,8 @@ export class Account extends Provider implements AccountInterface {
     const response = await super.getSimulateTransaction(
       invocation,
       { version, nonce },
-      blockIdentifier
+      blockIdentifier,
+      skipValidate
     );
 
     const suggestedMaxFee = estimatedFeeToMaxFee(response.fee_estimation.overall_fee);
diff --git a/src/account/interface.ts b/src/account/interface.ts
index 1517aec4..c278fb96 100644
--- a/src/account/interface.ts
+++ b/src/account/interface.ts
@@ -135,7 +135,9 @@ export abstract class AccountInterface extends ProviderInterface {
    * 
    * @param contractPayload transaction payload to be deployed containing:
   - contract: compiled contract code
-  - classHash: computed class hash of compiled contract
+  - (optional) classHash: computed class hash of compiled contract. Pre-compute it for faster execution.
+  - (required for Cairo1 without compiledClassHash) casm: CompiledContract | string;
+  - (optional for Cairo1 with casm) compiledClassHash: compiled class hash from casm. Pre-compute it for faster execution.
    * @param transactionsDetail Invocation Details containing:
   - optional nonce
   - optional version
diff --git a/src/contract/default.ts b/src/contract/default.ts
index 0d22dbdd..b04b333a 100644
--- a/src/contract/default.ts
+++ b/src/contract/default.ts
@@ -190,7 +190,7 @@ export class Contract implements ContractInterface {
     method: string,
     args: Array<any> = [],
     options: CallOptions = { parseRequest: true, parseResponse: true, formatResponse: undefined }
-  ): Promise<Object> {
+  ): Promise<object> {
     assert(this.address !== null, 'contract is not connected to an address');
     const blockIdentifier = options?.blockIdentifier || undefined;
     let calldata = args[0];
diff --git a/src/contract/interface.ts b/src/contract/interface.ts
index c69b71b6..abdc0e71 100644
--- a/src/contract/interface.ts
+++ b/src/contract/interface.ts
@@ -14,7 +14,7 @@ export type CallOptions = {
   blockIdentifier?: BlockIdentifier;
   parseRequest: Boolean;
   parseResponse: Boolean;
-  formatResponse?: Object | null;
+  formatResponse?: object | null;
 };
 
 export abstract class ContractInterface {
diff --git a/src/index.ts b/src/index.ts
index 99b15e96..b522a6e6 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -24,6 +24,7 @@ export * as typedData from './utils/typedData';
 export * as ec from './utils/ec';
 export * from './utils/address';
 export * from './utils/url';
+export * from './utils/calldata';
 
 /**
  * Deprecated
diff --git a/src/provider/default.ts b/src/provider/default.ts
index e1ec2dab..92e1e36d 100644
--- a/src/provider/default.ts
+++ b/src/provider/default.ts
@@ -17,7 +17,10 @@ import {
   InvocationBulk,
   InvocationsDetailsWithNonce,
   InvokeFunctionResponse,
+  Nonce,
+  RPC,
   StateUpdateResponse,
+  Storage,
   TransactionSimulationResponse,
   waitForTransactionOptions,
 } from '../types';
@@ -69,7 +72,7 @@ export class Provider implements ProviderInterface {
   public async getClassAt(
     contractAddress: string,
     blockIdentifier?: BlockIdentifier
-  ): Promise<ContractClass> {
+  ): Promise<ContractClass | RPC.ContractClass> {
     return this.provider.getClassAt(contractAddress, blockIdentifier);
   }
 
@@ -80,7 +83,7 @@ export class Provider implements ProviderInterface {
     return this.provider.getClassHashAt(contractAddress, blockIdentifier);
   }
 
-  public getClassByHash(classHash: string): Promise<ContractClass> {
+  public getClassByHash(classHash: string): Promise<ContractClass | RPC.ContractClass> {
     return this.provider.getClassByHash(classHash);
   }
 
@@ -95,12 +98,14 @@ export class Provider implements ProviderInterface {
   public async getInvokeEstimateFee(
     invocationWithTxType: Invocation,
     invocationDetails: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse> {
     return this.provider.getInvokeEstimateFee(
       invocationWithTxType,
       invocationDetails,
-      blockIdentifier
+      blockIdentifier,
+      skipValidate
     );
   }
 
@@ -114,7 +119,7 @@ export class Provider implements ProviderInterface {
   public async getNonceForAddress(
     contractAddress: string,
     blockIdentifier?: BlockIdentifier
-  ): Promise<BigNumberish> {
+  ): Promise<Nonce> {
     return this.provider.getNonceForAddress(contractAddress, blockIdentifier);
   }
 
@@ -122,7 +127,7 @@ export class Provider implements ProviderInterface {
     contractAddress: string,
     key: BigNumberish,
     blockIdentifier?: BlockIdentifier
-  ): Promise<BigNumberish> {
+  ): Promise<Storage> {
     return this.provider.getStorageAt(contractAddress, key, blockIdentifier);
   }
 
@@ -165,17 +170,24 @@ export class Provider implements ProviderInterface {
   public async getDeclareEstimateFee(
     transaction: DeclareContractTransaction,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse> {
-    return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier);
+    return this.provider.getDeclareEstimateFee(transaction, details, blockIdentifier, skipValidate);
   }
 
   public getDeployAccountEstimateFee(
     transaction: DeployAccountContractTransaction,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse> {
-    return this.provider.getDeployAccountEstimateFee(transaction, details, blockIdentifier);
+    return this.provider.getDeployAccountEstimateFee(
+      transaction,
+      details,
+      blockIdentifier,
+      skipValidate
+    );
   }
 
   public async getCode(
@@ -195,9 +207,15 @@ export class Provider implements ProviderInterface {
   public async getSimulateTransaction(
     invocation: Invocation,
     invocationDetails: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<TransactionSimulationResponse> {
-    return this.provider.getSimulateTransaction(invocation, invocationDetails, blockIdentifier);
+    return this.provider.getSimulateTransaction(
+      invocation,
+      invocationDetails,
+      blockIdentifier,
+      skipValidate
+    );
   }
 
   public async getStateUpdate(blockIdentifier?: BlockIdentifier): Promise<StateUpdateResponse> {
diff --git a/src/provider/interface.ts b/src/provider/interface.ts
index cd29f061..5dd113a6 100644
--- a/src/provider/interface.ts
+++ b/src/provider/interface.ts
@@ -18,7 +18,10 @@ import type {
   InvocationBulk,
   InvocationsDetailsWithNonce,
   InvokeFunctionResponse,
+  Nonce,
+  RPC,
   StateUpdateResponse,
+  Storage,
   TransactionSimulationResponse,
   waitForTransactionOptions,
 } from '../types';
@@ -71,7 +74,7 @@ export abstract class ProviderInterface {
   public abstract getClassAt(
     contractAddress: string,
     blockIdentifier?: BlockIdentifier
-  ): Promise<ContractClass>;
+  ): Promise<ContractClass | RPC.ContractClass>;
 
   /**
    * Returns the class hash deployed under the given address.
@@ -91,7 +94,7 @@ export abstract class ProviderInterface {
    * @param classHash - class hash
    * @returns Contract class of compiled contract
    */
-  public abstract getClassByHash(classHash: string): Promise<ContractClass>;
+  public abstract getClassByHash(classHash: string): Promise<ContractClass | RPC.ContractClass>;
 
   /**
    * Gets the nonce of a contract with respect to a specific block
@@ -102,7 +105,7 @@ export abstract class ProviderInterface {
   public abstract getNonceForAddress(
     contractAddress: string,
     blockIdentifier?: BlockIdentifier
-  ): Promise<BigNumberish>;
+  ): Promise<Nonce>;
 
   /**
    * Gets the contract's storage variable at a specific key.
@@ -116,7 +119,7 @@ export abstract class ProviderInterface {
     contractAddress: string,
     key: BigNumberish,
     blockIdentifier?: BlockIdentifier
-  ): Promise<BigNumberish>;
+  ): Promise<Storage>;
 
   /**
    * Gets the transaction information from a tx id.
@@ -196,16 +199,18 @@ export abstract class ProviderInterface {
    * - entrypoint - the entrypoint of the contract
    * - calldata - (defaults to []) the calldata
    * - signature - (defaults to []) the signature
-   * @param blockIdentifier - block identifier
    * @param details - optional details containing:
    * - nonce - optional nonce
    * - version - optional version
+   * @param blockIdentifier - (optional) block identifier
+   * @param skipValidate - (optional) skip cairo __validate__ method
    * @returns the estimated fee
    */
   public abstract getEstimateFee(
     invocation: Invocation,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier: BlockIdentifier
+    blockIdentifier: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse>;
 
   /**
@@ -216,16 +221,18 @@ export abstract class ProviderInterface {
    * - entrypoint - the entrypoint of the contract
    * - calldata - (defaults to []) the calldata
    * - signature - (defaults to []) the signature
-   * @param blockIdentifier - block identifier
    * @param details - optional details containing:
    * - nonce - optional nonce
    * - version - optional version
+   * @param blockIdentifier - (optional) block identifier
+   * @param skipValidate - (optional) skip cairo __validate__ method
    * @returns the estimated fee
    */
   public abstract getInvokeEstimateFee(
     invocation: Invocation,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse>;
 
   /**
@@ -239,13 +246,15 @@ export abstract class ProviderInterface {
    * - nonce
    * - version - optional version
    * - optional maxFee
-   * @param blockIdentifier - block identifier
+   * @param blockIdentifier - (optional) block identifier
+   * @param skipValidate - (optional) skip cairo __validate__ method
    * @returns the estimated fee
    */
   public abstract getDeclareEstimateFee(
     transaction: DeclareContractTransaction,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse>;
 
   /**
@@ -260,13 +269,15 @@ export abstract class ProviderInterface {
    * - nonce
    * - version - optional version
    * - optional maxFee
-   * @param blockIdentifier - block identifier
+   * @param blockIdentifier - (optional) block identifier
+   * @param skipValidate - (optional) skip cairo __validate__ method
    * @returns the estimated fee
    */
   public abstract getDeployAccountEstimateFee(
     transaction: DeployAccountContractTransaction,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<EstimateFeeResponse>;
 
   /**
@@ -308,13 +319,15 @@ export abstract class ProviderInterface {
    * @param details - optional details containing:
    * - nonce - optional nonce
    * - version - optional version
-   * @param blockIdentifier - block identifier
+   * @param blockIdentifier - (optional) block identifier
+   * @param skipValidate - (optional) skip cairo __validate__ method
    * @returns the transaction trace and estimated fee
    */
   public abstract getSimulateTransaction(
     invocation: Invocation,
     invocationDetails: InvocationsDetailsWithNonce,
-    blockIdentifier?: BlockIdentifier
+    blockIdentifier?: BlockIdentifier,
+    skipValidate?: boolean
   ): Promise<TransactionSimulationResponse>;
 
   /**
diff --git a/src/provider/rpc.ts b/src/provider/rpc.ts
index 0c20feea..7b489024 100644
--- a/src/provider/rpc.ts
+++ b/src/provider/rpc.ts
@@ -173,7 +173,7 @@ export class RpcProvider implements ProviderInterface {
     contractAddress: string,
     key: BigNumberish,
     blockIdentifier: BlockIdentifier = this.blockIdentifier
-  ): Promise<BigNumberish> {
+  ): Promise<RPC.Storage> {
     const parsedKey = toHex(key);
     const block_id = new Block(blockIdentifier).identifier;
     return this.fetchEndpoint('starknet_getStorageAt', {
@@ -268,22 +268,26 @@ export class RpcProvider implements ProviderInterface {
     blockIdentifier: BlockIdentifier = this.blockIdentifier
   ): Promise<EstimateFeeResponse> {
     const block_id = new Block(blockIdentifier).identifier;
-    return this.fetchEndpoint('starknet_estimateFee', {
-      request: {
-        type: RPC.TransactionType.DECLARE,
-        contract_class: {
-          program: contractDefinition.program,
-          entry_points_by_type: contractDefinition.entry_points_by_type,
-          abi: contractDefinition.abi, // rpc 2.0
+    if ('program' in contractDefinition) {
+      return this.fetchEndpoint('starknet_estimateFee', {
+        request: {
+          type: RPC.TransactionType.DECLARE,
+          contract_class: {
+            program: contractDefinition.program,
+            entry_points_by_type: contractDefinition.entry_points_by_type,
+            abi: contractDefinition.abi, // rpc 2.0
+          },
+          sender_address: senderAddress,
+          signature: signatureToHexArray(signature),
+          version: toHex(details?.version || 0),
+          nonce: toHex(details.nonce),
+          max_fee: toHex(details?.maxFee || 0),
         },
-        sender_address: senderAddress,
-        signature: signatureToHexArray(signature),
-        version: toHex(details?.version || 0),
-        nonce: toHex(details.nonce),
-        max_fee: toHex(details?.maxFee || 0),
-      },
-      block_id,
-    }).then(this.responseParser.parseFeeEstimateResponse);
+        block_id,
+      }).then(this.responseParser.parseFeeEstimateResponse);
+    }
+    // TODO: When RPC Update implement Sierra
+    throw new Error('RPC do not support Sierra Contracts yet');
   }
 
   public async getDeployAccountEstimateFee(
@@ -319,21 +323,25 @@ export class RpcProvider implements ProviderInterface {
     { contractDefinition, signature, senderAddress }: DeclareContractTransaction,
     details: InvocationsDetailsWithNonce
   ): Promise<DeclareContractResponse> {
-    return this.fetchEndpoint('starknet_addDeclareTransaction', {
-      declare_transaction: {
-        contract_class: {
-          program: contractDefinition.program,
-          entry_points_by_type: contractDefinition.entry_points_by_type,
-          abi: contractDefinition.abi, // rpc 2.0
+    if ('program' in contractDefinition) {
+      return this.fetchEndpoint('starknet_addDeclareTransaction', {
+        declare_transaction: {
+          contract_class: {
+            program: contractDefinition.program,
+            entry_points_by_type: contractDefinition.entry_points_by_type,
+            abi: contractDefinition.abi, // rpc 2.0
+          },
+          type: RPC.TransactionType.DECLARE,
+          version: '0x1',
+          max_fee: toHex(details.maxFee || 0),
+          signature: signatureToHexArray(signature),
+          sender_address: senderAddress,
+          nonce: toHex(details.nonce),
         },
-        type: RPC.TransactionType.DECLARE,
-        version: toHex(details.version || 0),
-        max_fee: toHex(details.maxFee || 0),
-        signature: signatureToHexArray(signature),
-        sender_address: senderAddress,
-        nonce: toHex(details.nonce),
-      },
-    });
+      });
+    }
+    // TODO: When RPC Update implement Sierra
+    throw new Error('RPC do not support Sierra Contracts yet');
   }
 
   public async deployAccountContract(
@@ -364,7 +372,7 @@ export class RpcProvider implements ProviderInterface {
         calldata: parseCalldata(functionInvocation.calldata),
         type: RPC.TransactionType.INVOKE,
         max_fee: toHex(details.maxFee || 0),
-        version: toHex(details.version || 1),
+        version: '0x1',
         signature: signatureToHexArray(functionInvocation.signature),
         nonce: toHex(details.nonce),
       },
diff --git a/src/provider/sequencer.ts b/src/provider/sequencer.ts
index e45ae240..1c766e86 100644
--- a/src/provider/sequencer.ts
+++ b/src/provider/sequencer.ts
@@ -2,6 +2,7 @@ import urljoin from 'url-join';
 
 import { BaseUrl, NetworkName, StarknetChainId } from '../constants';
 import {
+  CairoAssembly,
   Call,
   CallContractResponse,
   CallL1Handler,
@@ -29,8 +30,9 @@ import {
   TransactionType,
   waitForTransactionOptions,
 } from '../types';
+import { isSierra } from '../utils/contract';
 import fetch from '../utils/fetchPonyfill';
-import { getSelector, getSelectorFromName } from '../utils/hash';
+import { feeTransactionVersion, getSelector, getSelectorFromName } from '../utils/hash';
 import { parse, parseAlwaysAsBig, stringify } from '../utils/json';
 import {
   BigNumberish,
@@ -268,7 +270,9 @@ export class SequencerProvider implements ProviderInterface {
       'call_contract',
       { blockIdentifier },
       {
-        signature: [],
+        // TODO - determine best choice once both are fully supported in devnet
+        // signature: [],
+        // sender_address: contractAddress,
         contract_address: contractAddress,
         entry_point_selector: getSelectorFromName(entryPointSelector),
         calldata,
@@ -287,7 +291,7 @@ export class SequencerProvider implements ProviderInterface {
   public async getNonceForAddress(
     contractAddress: string,
     blockIdentifier: BlockIdentifier = this.blockIdentifier
-  ): Promise<BigNumberish> {
+  ): Promise<Sequencer.Nonce> {
     return this.fetchEndpoint('get_nonce', { contractAddress, blockIdentifier });
   }
 
@@ -295,7 +299,7 @@ export class SequencerProvider implements ProviderInterface {
     contractAddress: string,
     key: BigNumberish,
     blockIdentifier: BlockIdentifier = this.blockIdentifier
-  ): Promise<BigNumberish> {
+  ): Promise<Sequencer.Storage> {
     const parsedKey = toBigInt(key).toString(10);
     return this.fetchEndpoint('get_storage_at', {
       blockIdentifier,
@@ -336,8 +340,20 @@ export class SequencerProvider implements ProviderInterface {
     return this.fetchEndpoint('get_class_hash_at', { blockIdentifier, contractAddress });
   }
 
-  public async getClassByHash(classHash: string): Promise<ContractClass> {
-    return this.fetchEndpoint('get_class_by_hash', { classHash }).then(parseContract);
+  public async getClassByHash(
+    classHash: string,
+    blockIdentifier: BlockIdentifier = this.blockIdentifier
+  ): Promise<ContractClass> {
+    return this.fetchEndpoint('get_class_by_hash', { classHash, blockIdentifier }).then(
+      parseContract
+    );
+  }
+
+  public async getCompiledClassByClassHash(
+    classHash: string,
+    blockIdentifier: BlockIdentifier = this.blockIdentifier
+  ): Promise<CairoAssembly> {
+    return this.fetchEndpoint('get_compiled_class_by_class_hash', { classHash, blockIdentifier });
   }
 
   public async invokeFunction(
@@ -346,12 +362,12 @@ export class SequencerProvider implements ProviderInterface {
   ): Promise<InvokeFunctionResponse> {
     return this.fetchEndpoint('add_transaction', undefined, {
       type: TransactionType.INVOKE,
-      contract_address: functionInvocation.contractAddress,
+      sender_address: functionInvocation.contractAddress,
       calldata: bigNumberishArrayToDecimalStringArray(functionInvocation.calldata ?? []),
       signature: signatureToDecimalArray(functionInvocation.signature),
       nonce: toHex(details.nonce),
       max_fee: toHex(details.maxFee || 0),
-      version: toHex(details.version || 1),
+      version: '0x1',
     }).then(this.responseParser.parseInvokeFunctionResponse);
   }
 
@@ -372,39 +388,54 @@ export class SequencerProvider implements ProviderInterface {
   }
 
   public async declareContract(
-    { senderAddress, contractDefinition, signature }: DeclareContractTransaction,
+    { senderAddress, contractDefinition, signature, compiledClassHash }: DeclareContractTransaction,
     details: InvocationsDetailsWithNonce
   ): Promise<DeclareContractResponse> {
+    if (!isSierra(contractDefinition)) {
+      return this.fetchEndpoint('add_transaction', undefined, {
+        type: TransactionType.DECLARE,
+        contract_class: contractDefinition,
+        nonce: toHex(details.nonce),
+        signature: signatureToDecimalArray(signature),
+        sender_address: senderAddress,
+        max_fee: toHex(details.maxFee || 0),
+        version: '0x1',
+      }).then(this.responseParser.parseDeclareContractResponse);
+    }
+    // Cairo 1
     return this.fetchEndpoint('add_transaction', undefined, {
       type: TransactionType.DECLARE,
+      sender_address: senderAddress,
+      compiled_class_hash: compiledClassHash,
       contract_class: contractDefinition,
       nonce: toHex(details.nonce),
       signature: signatureToDecimalArray(signature),
-      sender_address: senderAddress,
       max_fee: toHex(details.maxFee || 0),
-      version: toHex(details.version || 1),
+      version: '0x2',
     }).then(this.responseParser.parseDeclareContractResponse);
   }
 
   public async getEstimateFee(
     invocation: Invocation,
     invocationDetails: InvocationsDetailsWithNonce,
-    blockIdentifier: BlockIdentifier = this.blockIdentifier
+    blockIdentifier: BlockIdentifier = this.blockIdentifier,
+    skipValidate: boolean = false
   ): Promise<EstimateFeeResponse> {
-    return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier);
+    return this.getInvokeEstimateFee(invocation, invocationDetails, blockIdentifier, skipValidate);
   }
 
   public async getInvokeEstimateFee(
     invocation: Invocation,
     invocationDetails: InvocationsDetailsWithNonce,
-    blockIdentifier: BlockIdentifier = this.blockIdentifier
+    blockIdentifier: BlockIdentifier = this.blockIdentifier,
+    skipValidate: boolean = false
   ): Promise<EstimateFeeResponse> {
     return this.fetchEndpoint(
       'estimate_fee',
-      { blockIdentifier },
+      { blockIdentifier, skipValidate },
       {
         type: TransactionType.INVOKE,
-        contract_address: invocation.contractAddress,
+        sender_address: invocation.contractAddress,
         calldata: invocation.calldata ?? [],
         signature: signatureToDecimalArray(invocation.signature),
         version: toHex(invocationDetails?.version || 1),
@@ -414,20 +445,37 @@ export class SequencerProvider implements ProviderInterface {
   }
 
   public async getDeclareEstimateFee(
-    { senderAddress, contractDefinition, signature }: DeclareContractTransaction,
+    { senderAddress, contractDefinition, signature, compiledClassHash }: DeclareContractTransaction,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier: BlockIdentifier = this.blockIdentifier
+    blockIdentifier: BlockIdentifier = this.blockIdentifier,
+    skipValidate: boolean = false
   ): Promise<EstimateFeeResponse> {
+    if (!isSierra(contractDefinition)) {
+      return this.fetchEndpoint(
+        'estimate_fee',
+        { blockIdentifier, skipValidate },
+        {
+          type: TransactionType.DECLARE,
+          sender_address: senderAddress,
+          contract_class: contractDefinition,
+          signature: signatureToDecimalArray(signature),
+          version: toHex(details?.version || toBigInt(feeTransactionVersion)),
+          nonce: toHex(details.nonce),
+        }
+      ).then(this.responseParser.parseFeeEstimateResponse);
+    }
+
     return this.fetchEndpoint(
       'estimate_fee',
-      { blockIdentifier },
+      { blockIdentifier, skipValidate },
       {
         type: TransactionType.DECLARE,
         sender_address: senderAddress,
+        compiled_class_hash: compiledClassHash,
         contract_class: contractDefinition,
-        signature: signatureToDecimalArray(signature),
-        version: toHex(details?.version || 1),
         nonce: toHex(details.nonce),
+        signature: signatureToDecimalArray(signature),
+        version: '0x2',
       }
     ).then(this.responseParser.parseFeeEstimateResponse);
   }
@@ -435,11 +483,12 @@ export class SequencerProvider implements ProviderInterface {
   public async getDeployAccountEstimateFee(
     { classHash, addressSalt, constructorCalldata, signature }: DeployAccountContractTransaction,
     details: InvocationsDetailsWithNonce,
-    blockIdentifier: BlockIdentifier = this.blockIdentifier
+    blockIdentifier: BlockIdentifier = this.blockIdentifier,
+    skipValidate: boolean = false
   ): Promise<EstimateFeeResponse> {
     return this.fetchEndpoint(
       'estimate_fee',
-      { blockIdentifier },
+      { blockIdentifier, skipValidate },
       {
         type: TransactionType.DEPLOY_ACCOUNT,
         class_hash: toHex(classHash),
@@ -461,7 +510,7 @@ export class SequencerProvider implements ProviderInterface {
       if (invocation.type === 'INVOKE_FUNCTION') {
         res = {
           type: invocation.type,
-          contract_address: invocation.contractAddress,
+          sender_address: invocation.contractAddress,
           calldata: invocation.calldata ?? [],
         };
       } else if (invocation.type === 'DECLARE') {
@@ -583,14 +632,15 @@ export class SequencerProvider implements ProviderInterface {
   public async getSimulateTransaction(
     invocation: Invocation,
     invocationDetails: InvocationsDetailsWithNonce,
-    blockIdentifier: BlockIdentifier = this.blockIdentifier
+    blockIdentifier: BlockIdentifier = this.blockIdentifier,
+    skipValidate: boolean = false
   ): Promise<TransactionSimulationResponse> {
     return this.fetchEndpoint(
       'simulate_transaction',
-      { blockIdentifier },
+      { blockIdentifier, skipValidate },
       {
         type: 'INVOKE_FUNCTION',
-        contract_address: invocation.contractAddress,
+        sender_address: invocation.contractAddress,
         calldata: invocation.calldata ?? [],
         signature: signatureToDecimalArray(invocation.signature),
         version: toHex(invocationDetails?.version || 1),
diff --git a/src/signer/default.ts b/src/signer/default.ts
index c6f7a524..8175ba86 100644
--- a/src/signer/default.ts
+++ b/src/signer/default.ts
@@ -78,7 +78,15 @@ export class Signer implements SignerInterface {
 
   public async signDeclareTransaction(
     // contractClass: ContractClass,  // Should be used once class hash is present in ContractClass
-    { classHash, senderAddress, chainId, maxFee, version, nonce }: DeclareSignerDetails
+    {
+      classHash,
+      senderAddress,
+      chainId,
+      maxFee,
+      version,
+      nonce,
+      compiledClassHash,
+    }: DeclareSignerDetails
   ) {
     const msgHash = calculateDeclareTransactionHash(
       classHash,
@@ -86,7 +94,8 @@ export class Signer implements SignerInterface {
       version,
       maxFee,
       chainId,
-      nonce
+      nonce,
+      compiledClassHash
     );
 
     return starkCurve.sign(msgHash, this.pk);
diff --git a/src/types/account.ts b/src/types/account.ts
index 60c0b261..62b345ba 100644
--- a/src/types/account.ts
+++ b/src/types/account.ts
@@ -15,6 +15,7 @@ export type EstimateFeeBulk = Array<EstimateFee>;
 export interface EstimateFeeDetails {
   nonce?: BigNumberish;
   blockIdentifier?: BlockIdentifier;
+  skipValidate?: boolean;
 }
 
 export interface DeployContractResponse {
diff --git a/src/types/api/openrpc.ts b/src/types/api/openrpc.ts
index c3f4e267..a11b82c6 100644
--- a/src/types/api/openrpc.ts
+++ b/src/types/api/openrpc.ts
@@ -1,5 +1,5 @@
 /**
- * Starknet RPC version 0.2.0
+ * Starknet RPC version 0.2.1
  *
  * Starknet Node API 0.45.0 - rpc 0.2.1
  * Starknet Node Write API 0.3.0 - rpc 0.2.1
@@ -252,9 +252,9 @@ type CONTRACT_ENTRY_POINT = {
   offset: NUM_AS_HEX;
   selector: FELT;
 };
-type CONTRACT_STORAGE_DIFF_ITEM = {
+export type CONTRACT_STORAGE_DIFF_ITEM = {
   address: FELT;
-  storage_entries: [key: FELT, value: FELT];
+  storage_entries: { key: FELT; value: FELT }[];
 };
 
 type DEPLOYED_CONTRACT_ITEM = {
diff --git a/src/types/api/rpc.ts b/src/types/api/rpc.ts
index 553c3fa0..041b8fe4 100644
--- a/src/types/api/rpc.ts
+++ b/src/types/api/rpc.ts
@@ -1,4 +1,4 @@
-import { ADDRESS, FELT, OPENRPC } from './openrpc';
+import { ADDRESS, CONTRACT_STORAGE_DIFF_ITEM, FELT, OPENRPC } from './openrpc';
 
 export namespace RPC {
   export type Response = {
@@ -42,8 +42,8 @@ export namespace RPC {
   export type DeclaredTransaction = OPENRPC.DeclaredTransaction;
   export type DeployedTransaction = OPENRPC.DeployedTransaction;
   export type Methods = OPENRPC.Methods;
+  export type Storage = OPENRPC.Storage;
 
-  // 'DECLARE' | 'DEPLOY' | 'DEPLOY_ACCOUNT' | 'INVOKE' | 'L1_HANDLER'
   export enum TransactionType {
     DECLARE = 'DECLARE',
     DEPLOY = 'DEPLOY',
@@ -51,4 +51,12 @@ export namespace RPC {
     INVOKE = 'INVOKE',
     L1_HANDLER = 'L1_HANDLER',
   }
+
+  // Exported Diff on Sequencer (can be removed when diff resolved by new RPC v)
+  export type StorageDiffs = Array<CONTRACT_STORAGE_DIFF_ITEM>;
+  export type DeclaredContractHashes = Array<FELT>;
+  export type Nonces = Array<{
+    contract_address: ADDRESS;
+    nonce: FELT;
+  }>;
 }
diff --git a/src/types/api/sequencer.ts b/src/types/api/sequencer.ts
index 7dbb9630..e6dffc58 100644
--- a/src/types/api/sequencer.ts
+++ b/src/types/api/sequencer.ts
@@ -4,6 +4,9 @@ import {
   Abi,
   AllowArray,
   BlockNumber,
+  ByteCode,
+  CairoAssembly,
+  CompiledContract,
   ContractClass,
   EntryPointType,
   RawCalldata,
@@ -32,7 +35,7 @@ export type FunctionInvocation = {
   call_type?: string;
   class_hash?: string;
   selector?: string;
-  entry_point_type?: EntryPointType;
+  entry_point_type?: EntryPointType.EXTERNAL; // TODO: check this
   result: Array<any>;
   execution_resources: ExecutionResources;
   internal_calls: Array<FunctionInvocation>;
@@ -67,26 +70,11 @@ export type CallL1Handler = {
   payload: Array<string>;
 };
 
-export type StateDiffItem = {
-  key: string;
-  value: string;
-};
-
-export type StorageDiffItem = {
-  address: string;
-  storage_entries: [key: string, value: string];
-};
-
 export type DeployedContractItem = {
   address: string;
   class_hash: string;
 };
 
-export type Nonces = {
-  contract_address: string;
-  nonce: string;
-};
-
 export type SequencerIdentifier = { blockHash: string } | { blockNumber: BlockNumber };
 
 export namespace Sequencer {
@@ -98,6 +86,7 @@ export namespace Sequencer {
     nonce: BigNumberish;
     max_fee?: BigNumberish;
     version?: BigNumberish;
+    compiled_class_hash?: string; // v2 declare
   };
 
   export type DeployTransaction = {
@@ -121,9 +110,9 @@ export namespace Sequencer {
 
   export type InvokeFunctionTransaction = {
     type: 'INVOKE_FUNCTION';
-    contract_address: string;
+    sender_address: string;
     signature?: string[];
-    entry_point_type?: EntryPointType;
+    entry_point_type?: EntryPointType.EXTERNAL; // TODO: check this
     calldata?: RawCalldata;
     nonce: BigNumberish;
     max_fee?: BigNumberish;
@@ -144,7 +133,7 @@ export namespace Sequencer {
   };
 
   export type GetCodeResponse = {
-    bytecode: string[];
+    bytecode: ByteCode;
     abi: Abi;
   };
 
@@ -233,10 +222,21 @@ export namespace Sequencer {
     starknet_version: string;
   };
 
-  export type CallContractTransaction = Omit<
-    InvokeFunctionTransaction,
-    'type' | 'entry_point_type' | 'nonce'
-  > & { entry_point_selector: string };
+  export type CallContractTransaction = {
+    calldata?: RawCalldata;
+    max_fee?: BigNumberish;
+    version?: BigNumberish;
+    entry_point_selector: string;
+  } & (
+    | {
+        sender_address: string;
+        signature: string[];
+      }
+    | {
+        contract_address: string;
+        signature?: never;
+      }
+  );
 
   export type CallContractResponse = {
     result: string[];
@@ -283,20 +283,40 @@ export namespace Sequencer {
     traces: Array<TransactionTraceResponse & { transaction_hash: string }>;
   };
 
+  export type Storage = string;
+
   export type StateUpdateResponse = {
     block_hash: string;
     new_root: string;
     old_root: string;
     state_diff: {
-      storage_diffs: Array<{
-        [address: string]: Array<StateDiffItem>;
-      }>;
-      declared_contract_hashes: Array<string>;
+      storage_diffs: StorageDiffs;
+      nonces: Nonces;
       deployed_contracts: Array<DeployedContractItem>;
-      nonces: Array<Nonces>;
+      old_declared_contracts: OldDeclaredContracts;
+      declared_classes: DeclaredClasses;
+      replaced_classes: ReplacedClasses; // no definition is it array of string
     };
   };
 
+  export type StorageDiffs = { [address: string]: Array<StateDiffItem> };
+
+  export type StateDiffItem = { key: string; value: string };
+
+  export type Nonces = { [address: string]: Nonce };
+
+  export type Nonce = string;
+
+  export type DeployedContracts = DeployedContractItem[];
+
+  export type OldDeclaredContracts = string[];
+
+  export type DeclaredClasses = DeclaredClass[];
+
+  export type DeclaredClass = { class_hash: string; compiled_class_hash: string };
+
+  export type ReplacedClasses = string[]; // no definition is it array of string ?
+
   export type Endpoints = {
     get_contract_addresses: {
       QUERY: never;
@@ -342,7 +362,7 @@ export namespace Sequencer {
         blockIdentifier: BlockIdentifier;
       };
       REQUEST: never;
-      RESPONSE: BigNumberish;
+      RESPONSE: Nonce;
     };
     get_storage_at: {
       QUERY: {
@@ -351,7 +371,7 @@ export namespace Sequencer {
         blockIdentifier: BlockIdentifier;
       };
       REQUEST: never;
-      RESPONSE: string;
+      RESPONSE: Storage;
     };
     get_code: {
       QUERY: {
@@ -378,6 +398,7 @@ export namespace Sequencer {
     estimate_fee: {
       QUERY: {
         blockIdentifier: BlockIdentifier;
+        skipValidate: boolean;
       };
       REQUEST: EstimateFeeRequest;
       RESPONSE: EstimateFeeResponse;
@@ -385,9 +406,10 @@ export namespace Sequencer {
     get_class_by_hash: {
       QUERY: {
         classHash: string;
+        blockIdentifier?: BlockIdentifier;
       };
       REQUEST: never;
-      RESPONSE: any;
+      RESPONSE: CompiledContract;
     };
     get_class_hash_at: {
       QUERY: {
@@ -411,7 +433,7 @@ export namespace Sequencer {
         blockIdentifier?: BlockIdentifier;
       };
       REQUEST: never;
-      RESPONSE: any;
+      RESPONSE: CompiledContract;
     };
     estimate_message_fee: {
       QUERY: any;
@@ -421,6 +443,7 @@ export namespace Sequencer {
     simulate_transaction: {
       QUERY: {
         blockIdentifier: BlockIdentifier;
+        skipValidate: boolean;
       };
       REQUEST: SimulateTransaction;
       RESPONSE: TransactionSimulationResponse;
@@ -440,5 +463,13 @@ export namespace Sequencer {
       REQUEST: never;
       RESPONSE: BlockTransactionTracesResponse;
     };
+    get_compiled_class_by_class_hash: {
+      QUERY: {
+        classHash: string;
+        blockIdentifier?: BlockIdentifier;
+      };
+      REQUEST: any;
+      RESPONSE: CairoAssembly;
+    };
   };
 }
diff --git a/src/types/lib/contract/abi.ts b/src/types/lib/contract/abi.ts
new file mode 100644
index 00000000..5ac218e1
--- /dev/null
+++ b/src/types/lib/contract/abi.ts
@@ -0,0 +1,31 @@
+/** ABI */
+export type Abi = Array<FunctionAbi | EventAbi | StructAbi>;
+
+// Basic elements
+export type AbiEntry = { name: string; type: 'felt' | 'felt*' | string };
+
+enum FunctionAbiType {
+  'function',
+  'l1_handler',
+  'constructor',
+}
+
+// Sub elements
+export type FunctionAbi = {
+  inputs: AbiEntry[];
+  name: string;
+  outputs: AbiEntry[];
+  stateMutability?: 'view';
+  type: FunctionAbiType;
+};
+
+export type AbiStructs = { [name: string]: StructAbi };
+
+export type StructAbi = {
+  members: (AbiEntry & { offset: number })[];
+  name: string;
+  size: number;
+  type: 'struct';
+};
+
+type EventAbi = any;
diff --git a/src/types/lib/contract/index.ts b/src/types/lib/contract/index.ts
new file mode 100644
index 00000000..bf7bb94f
--- /dev/null
+++ b/src/types/lib/contract/index.ts
@@ -0,0 +1,18 @@
+import { LegacyCompiledContract, LegacyContractClass } from './legacy';
+import { CompiledSierra, SierraContractClass } from './sierra';
+
+// Final types
+export type ContractClass = LegacyContractClass | SierraContractClass;
+export type CompiledContract = LegacyCompiledContract | CompiledSierra;
+export type CairoContract = ContractClass | CompiledContract;
+
+// Basic elements
+export enum EntryPointType {
+  EXTERNAL = 'EXTERNAL',
+  L1_HANDLER = 'L1_HANDLER',
+  CONSTRUCTOR = 'CONSTRUCTOR',
+}
+
+export * from './abi';
+export * from './legacy';
+export * from './sierra';
diff --git a/src/types/lib/contract/legacy.ts b/src/types/lib/contract/legacy.ts
new file mode 100644
index 00000000..817c63cb
--- /dev/null
+++ b/src/types/lib/contract/legacy.ts
@@ -0,0 +1,34 @@
+import { Abi } from './abi';
+
+/** LEGACY CONTRACT */
+export type LegacyContractClass = {
+  program: CompressedProgram;
+  entry_points_by_type: EntryPointsByType;
+  abi: Abi;
+};
+
+export type LegacyCompiledContract = Omit<LegacyContractClass, 'program'> & {
+  program: Program;
+};
+
+/** SUBTYPES */
+export type Builtins = string[];
+export type CompressedProgram = string;
+
+export type EntryPointsByType = {
+  CONSTRUCTOR: ContractEntryPointFields[];
+  EXTERNAL: ContractEntryPointFields[];
+  L1_HANDLER: ContractEntryPointFields[];
+};
+
+export type ContractEntryPointFields = {
+  selector: string;
+  offset: string;
+  builtins?: Builtins;
+};
+
+export interface Program extends Record<string, any> {
+  builtins: string[];
+  data: string[];
+  // TODO: Add missing properties
+}
diff --git a/src/types/lib/contract/sierra.ts b/src/types/lib/contract/sierra.ts
new file mode 100644
index 00000000..a6e46b38
--- /dev/null
+++ b/src/types/lib/contract/sierra.ts
@@ -0,0 +1,44 @@
+import { Abi } from './abi';
+import { EntryPointsByType } from './legacy';
+
+/** SYSTEM TYPES */
+export type CairoAssembly = {
+  prime: string;
+  compiler_version: string;
+  bytecode: ByteCode;
+  hints: Hints;
+  entry_points_by_type: EntryPointsByType;
+};
+
+export type SierraContractClass = {
+  sierra_program: ByteCode;
+  sierra_program_debug_info: SierraProgramDebugInfo;
+  contract_class_version: string;
+  entry_points_by_type: SierraEntryPointsByType;
+  abi: Abi;
+};
+
+/** COMPILED CONTRACT */
+export type CompiledSierra = SierraContractClass;
+export type CompiledSierraCasm = CairoAssembly;
+
+/** SUBTYPES */
+export type ByteCode = string[];
+export type Hints = [number, string[]][];
+
+export type SierraProgramDebugInfo = {
+  type_names: [number, string][];
+  libfunc_names: [number, string][];
+  user_func_names: [number, string][];
+};
+
+export type SierraEntryPointsByType = {
+  CONSTRUCTOR: SierraContractEntryPointFields[];
+  EXTERNAL: SierraContractEntryPointFields[];
+  L1_HANDLER: SierraContractEntryPointFields[];
+};
+
+export type SierraContractEntryPointFields = {
+  selector: string;
+  function_idx: number;
+};
diff --git a/src/types/lib.ts b/src/types/lib/index.ts
similarity index 61%
rename from src/types/lib.ts
rename to src/types/lib/index.ts
index 3582f776..18583773 100644
--- a/src/types/lib.ts
+++ b/src/types/lib/index.ts
@@ -1,6 +1,7 @@
-import { weierstrass } from '../utils/ec';
-import type { BigNumberish } from '../utils/num';
-import { RPC } from './api/rpc';
+import { StarknetChainId } from '../../constants';
+import { weierstrass } from '../../utils/ec';
+import type { BigNumberish } from '../../utils/num';
+import { CompiledContract, CompiledSierraCasm, ContractClass } from './contract';
 
 // Common Signature Type which needs to be imported from weierstrass
 // and imported at many places
@@ -18,12 +19,6 @@ export type RawArgs =
     }
   | BigNumberish[];
 
-export interface ContractClass {
-  program: CompressedProgram;
-  entry_points_by_type: RPC.ContractClass['entry_points_by_type'];
-  abi?: Abi;
-}
-
 export type UniversalDeployerContractPayload = {
   classHash: BigNumberish;
   salt?: string;
@@ -54,6 +49,15 @@ export type DeployAccountContractTransaction = Omit<
 export type DeclareContractPayload = {
   contract: CompiledContract | string;
   classHash?: string;
+  casm?: CompiledSierraCasm;
+  compiledClassHash?: string;
+};
+
+export type CompleteDeclareContractPayload = {
+  contract: CompiledContract | string;
+  classHash: string;
+  casm?: CompiledSierraCasm;
+  compiledClassHash?: string;
 };
 
 export type DeclareAndDeployContractPayload = Omit<UniversalDeployerContractPayload, 'classHash'> &
@@ -63,6 +67,7 @@ export type DeclareContractTransaction = {
   contractDefinition: ContractClass;
   senderAddress: string;
   signature?: Signature;
+  compiledClassHash?: string;
 };
 
 export type CallDetails = {
@@ -80,7 +85,19 @@ export type InvocationsDetails = {
   version?: BigNumberish;
 };
 
-export type InvocationsDetailsWithNonce = InvocationsDetails & { nonce: BigNumberish };
+/**
+ * Contain all additional details params
+ */
+export type Details = {
+  nonce: BigNumberish;
+  maxFee: BigNumberish;
+  version: BigNumberish;
+  chainId: StarknetChainId;
+};
+
+export type InvocationsDetailsWithNonce = InvocationsDetails & {
+  nonce: BigNumberish;
+};
 
 export enum TransactionStatus {
   NOT_RECEIVED = 'NOT_RECEIVED',
@@ -123,99 +140,10 @@ export enum TransactionType {
   DEPLOY_ACCOUNT = 'DEPLOY_ACCOUNT',
 }
 
-export type EntryPointType = 'EXTERNAL';
-export type CompressedProgram = string;
-
-export type AbiEntry = { name: string; type: 'felt' | 'felt*' | string };
 export type Tupled = { element: any; type: string };
-
-export type FunctionAbi = {
-  inputs: AbiEntry[];
-  name: string;
-  outputs: AbiEntry[];
-  stateMutability?: 'view';
-  type: FunctionAbiType;
-};
-
-enum FunctionAbiType {
-  'function',
-  'l1_handler',
-  'constructor',
-}
-
-export type abiStructs = { [name: string]: StructAbi };
-
-export type StructAbi = {
-  members: (AbiEntry & { offset: number })[];
-  name: string;
-  size: number;
-  type: 'struct';
-};
-
-export type Abi = Array<FunctionAbi | EventAbi | StructAbi>;
-
-type EventAbi = any;
-
-export type Builtins = string[];
-
-export type SieraContractEntryPointFields = {
-  selector: string;
-  function_idx: number;
-};
-
-export type ContractEntryPointFields = {
-  selector: string;
-  offset: string;
-  builtins?: Builtins;
-};
-
-export type EntryPointsByType = {
-  CONSTRUCTOR: ContractEntryPointFields[];
-  EXTERNAL: ContractEntryPointFields[];
-  L1_HANDLER: ContractEntryPointFields[];
-};
-
-export type SieraEntryPointsByType = {
-  CONSTRUCTOR: SieraContractEntryPointFields[];
-  EXTERNAL: SieraContractEntryPointFields[];
-  L1_HANDLER: SieraContractEntryPointFields[];
-};
-
-export interface Program extends Record<string, any> {
-  builtins: string[];
-  data: string[];
-}
 export type BlockTag = 'pending' | 'latest';
 export type BlockNumber = BlockTag | null | number;
 
-export type CompiledContract = {
-  abi: Abi;
-  entry_points_by_type: EntryPointsByType;
-  program: Program;
-};
-
-export type CompressedCompiledContract = Omit<CompiledContract, 'program'> & {
-  program: CompressedProgram;
-};
-
-export type Hints = [number, string[]][];
-
-export type CompiledSieraCasm = {
-  prime: string;
-  compiler_version: string;
-  bytecode: string[];
-  hints: Hints;
-  entry_points_by_type: EntryPointsByType;
-};
-
-export type CompiledSiera = {
-  sierra_program: string[];
-  sierra_program_debug_info: any;
-  contract_class_version: string;
-  entry_points_by_type: SieraEntryPointsByType;
-  abi: Abi;
-};
-
 export type Struct = {
   type: 'struct';
   [k: string]: BigNumberish;
@@ -231,3 +159,5 @@ export type waitForTransactionOptions = {
   retryInterval?: number;
   successStates?: Array<TransactionStatus>;
 };
+
+export * from './contract';
diff --git a/src/types/provider.ts b/src/types/provider.ts
index 95484c7c..1b083994 100644
--- a/src/types/provider.ts
+++ b/src/types/provider.ts
@@ -3,14 +3,11 @@
  * Intersection (sequencer response ∩ (∪ rpc responses))
  */
 
-import {
-  DeployedContractItem,
-  Nonces,
-  StorageDiffItem,
-  TransactionTraceResponse,
-} from './api/sequencer';
+import { RPC } from './api/rpc';
+import { Sequencer, TransactionTraceResponse } from './api/sequencer';
 import {
   AllowArray,
+  ByteCode,
   Call,
   DeclareContractPayload,
   DeployAccountContractPayload,
@@ -36,7 +33,7 @@ export interface GetBlockResponse {
 }
 
 export interface GetCodeResponse {
-  bytecode: string[];
+  bytecode: ByteCode;
   // abi: string; // is not consistent between rpc and sequencer (is it?), therefore not included in the provider interface
 }
 
@@ -51,7 +48,8 @@ export interface CommonTransactionResponse {
 }
 
 export interface InvokeTransactionResponse extends CommonTransactionResponse {
-  contract_address?: string;
+  contract_address?: string; // TODO: Added for RPC comp, remove when rpc update to sender_address
+  sender_address?: string;
   entry_point_selector?: string;
   calldata: RawCalldata;
 }
@@ -141,19 +139,27 @@ export type EstimateFeeAction =
 
 export type EstimateFeeResponseBulk = Array<EstimateFeeResponse>;
 
+export type Storage = Sequencer.Storage;
+
+export type Nonce = Sequencer.Nonce;
+
 export interface TransactionSimulationResponse {
   trace: TransactionTraceResponse;
   fee_estimation: EstimateFeeResponse;
 }
 
+// As RPC and Sequencer response diverge, use RPC as common response
 export interface StateUpdateResponse {
   block_hash: string;
   new_root: string;
   old_root: string;
   state_diff: {
-    storage_diffs: Array<StorageDiffItem>;
-    declared_contract_hashes: Array<string>;
-    deployed_contracts: Array<DeployedContractItem>;
-    nonces: Array<Nonces>;
+    storage_diffs: RPC.StorageDiffs; // API DIFF
+    declared_contract_hashes?: RPC.DeclaredContractHashes; // RPC only
+    deployed_contracts: Sequencer.DeployedContracts;
+    nonces: RPC.Nonces; // API DIFF
+    old_declared_contracts?: Sequencer.OldDeclaredContracts; // Sequencer Only
+    declared_classes?: Sequencer.DeclaredClasses; // Sequencer Only
+    replaced_classes?: Sequencer.ReplacedClasses; // Sequencer Only
   };
 }
diff --git a/src/types/signer.ts b/src/types/signer.ts
index 53506ec9..7f75cd5b 100644
--- a/src/types/signer.ts
+++ b/src/types/signer.ts
@@ -14,6 +14,7 @@ export interface DeclareSignerDetails {
   maxFee: BigNumberish;
   version: BigNumberish;
   nonce: BigNumberish;
+  compiledClassHash?: string;
 }
 
 export type DeployAccountSignerDetails = Required<DeployAccountContractPayload> &
diff --git a/src/utils/calldata/cairo.ts b/src/utils/calldata/cairo.ts
index 77d4a5c1..e0adc175 100644
--- a/src/utils/calldata/cairo.ts
+++ b/src/utils/calldata/cairo.ts
@@ -1,4 +1,4 @@
-import { abiStructs } from '../../types';
+import { AbiStructs } from '../../types';
 import { BigNumberish, isBigInt, isHex, isStringWholeNumber } from '../num';
 import { encodeShortString, isShortString, isText } from '../shortString';
 import { UINT_128_MAX, Uint256, isUint256 } from '../uint256';
@@ -9,7 +9,7 @@ export const isTypeFeltArray = (type: string) => type === 'felt*';
 export const isTypeArray = (type: string) => /\*/.test(type);
 export const isTypeTuple = (type: string) => /^\(.*\)$/i.test(type);
 export const isTypeNamedTuple = (type: string) => /\(.*\)/i.test(type) && type.includes(':');
-export const isTypeStruct = (type: string, structs: abiStructs) => type in structs;
+export const isTypeStruct = (type: string, structs: AbiStructs) => type in structs;
 
 /**
  * named tuple are described as js object {}
diff --git a/src/utils/calldata/index.ts b/src/utils/calldata/index.ts
index 78d81c1b..40037787 100644
--- a/src/utils/calldata/index.ts
+++ b/src/utils/calldata/index.ts
@@ -1,4 +1,4 @@
-import { Abi, AbiEntry, Args, Calldata, FunctionAbi, abiStructs } from '../../types';
+import { Abi, AbiEntry, AbiStructs, Args, Calldata, FunctionAbi } from '../../types';
 import assert from '../assert';
 import { isBigInt } from '../num';
 import { isLongText, splitLongString } from '../shortString';
@@ -13,7 +13,7 @@ import validateFields from './validate';
 export class CallData {
   abi: Abi;
 
-  protected readonly structs: abiStructs;
+  protected readonly structs: AbiStructs;
 
   constructor(abi: Abi) {
     this.abi = abi;
@@ -126,7 +126,7 @@ export class CallData {
    * @param response  - response from the method
    * @return - parsed response corresponding to the abi
    */
-  public parse(method: string, response: string[]): Object {
+  public parse(method: string, response: string[]): object {
     const { outputs } = this.abi.find((abi) => abi.name === method) as FunctionAbi;
     const responseIterator = response.flat()[Symbol.iterator]();
 
@@ -146,7 +146,7 @@ export class CallData {
    * @param format - formatter object schema
    * @returns parsed and formatted response object
    */
-  public format(method: string, response: string[], format: Object): Object {
+  public format(method: string, response: string[], format: object): object {
     const parsed = this.parse(method, response);
     return formatter(parsed, format);
   }
diff --git a/src/utils/calldata/requestParser.ts b/src/utils/calldata/requestParser.ts
index 4c10d427..13a7a0f2 100644
--- a/src/utils/calldata/requestParser.ts
+++ b/src/utils/calldata/requestParser.ts
@@ -1,4 +1,4 @@
-import { AbiEntry, ParsedStruct, Tupled, abiStructs } from '../../types';
+import { AbiEntry, AbiStructs, ParsedStruct, Tupled } from '../../types';
 import { BigNumberish } from '../num';
 import { isText, splitLongString } from '../shortString';
 import { felt, isTypeArray, isTypeFeltArray, isTypeStruct, isTypeTuple } from './cairo';
@@ -41,7 +41,7 @@ function parseTuple(element: object, typeStr: string): Tupled[] {
 function parseCalldataValue(
   element: ParsedStruct | BigNumberish | BigNumberish[],
   type: string,
-  structs: abiStructs
+  structs: AbiStructs
 ): string | string[] {
   if (element === undefined) {
     throw Error(`Missing parameter for type ${type}`);
@@ -84,7 +84,7 @@ function parseCalldataValue(
 export function parseCalldataField(
   argsIterator: Iterator<any>,
   input: AbiEntry,
-  structs: abiStructs
+  structs: AbiStructs
 ): string | string[] {
   const { name, type } = input;
   let { value } = argsIterator.next();
diff --git a/src/utils/calldata/responseParser.ts b/src/utils/calldata/responseParser.ts
index 97e09eac..ea6922ad 100644
--- a/src/utils/calldata/responseParser.ts
+++ b/src/utils/calldata/responseParser.ts
@@ -1,4 +1,4 @@
-import { AbiEntry, Args, ParsedStruct, abiStructs } from '../../types';
+import { AbiEntry, AbiStructs, Args, ParsedStruct } from '../../types';
 import { BigNumberish } from '../num';
 import { isLen, isTypeArray, isTypeTuple } from './cairo';
 import extractTupleMemberTypes from './tuple';
@@ -14,7 +14,7 @@ import extractTupleMemberTypes from './tuple';
 function parseResponseStruct(
   responseIterator: Iterator<string>,
   type: string,
-  structs: abiStructs
+  structs: AbiStructs
 ): BigNumberish | ParsedStruct {
   // type struct
   if (type in structs && structs[type]) {
@@ -49,7 +49,7 @@ function parseResponseStruct(
 export default function responseParser(
   responseIterator: Iterator<string>,
   output: AbiEntry,
-  structs: abiStructs,
+  structs: AbiStructs,
   parsedResult?: Args
 ): any {
   const { name, type } = output;
diff --git a/src/utils/calldata/validate.ts b/src/utils/calldata/validate.ts
index b01266d9..89515ebc 100644
--- a/src/utils/calldata/validate.ts
+++ b/src/utils/calldata/validate.ts
@@ -1,4 +1,4 @@
-import { AbiEntry, FunctionAbi, abiStructs } from '../../types';
+import { AbiEntry, AbiStructs, FunctionAbi } from '../../types';
 /**
  * Validate cairo contract method arguments
  * Flow: Determine type from abi and than validate against parameter
@@ -15,7 +15,7 @@ const validateFelt = (parameter: any, input: AbiEntry) => {
   );
 };
 
-const validateStruct = (parameter: any, input: AbiEntry, structs: abiStructs) => {
+const validateStruct = (parameter: any, input: AbiEntry, structs: AbiStructs) => {
   assert(
     typeof parameter === 'object' && !Array.isArray(parameter),
     `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as js object (not array)`
@@ -38,7 +38,7 @@ const validateTuple = (parameter: any, input: AbiEntry) => {
   // todo: skip tuple structural validation for now
 };
 
-const validateArray = (parameter: any, input: AbiEntry, structs: abiStructs) => {
+const validateArray = (parameter: any, input: AbiEntry, structs: AbiStructs) => {
   const baseType = input.type.replace('*', '');
 
   // Long text (special case when parameter is not an array but long text)
@@ -68,7 +68,7 @@ const validateArray = (parameter: any, input: AbiEntry, structs: abiStructs) =>
 export default function validateFields(
   abiMethod: FunctionAbi,
   args: Array<any>,
-  structs: abiStructs
+  structs: AbiStructs
 ) {
   abiMethod.inputs.reduce((acc, input) => {
     const parameter = args[acc];
diff --git a/src/utils/contract.ts b/src/utils/contract.ts
new file mode 100644
index 00000000..f3c15579
--- /dev/null
+++ b/src/utils/contract.ts
@@ -0,0 +1,32 @@
+import { parse } from 'json-bigint';
+
+import { CairoContract } from '../types/lib/contract/index';
+import { CompleteDeclareContractPayload, DeclareContractPayload } from '../types/lib/index';
+import { computeCompiledClassHash, computeContractClassHash } from './hash';
+
+export function isSierra(contract: CairoContract | string) {
+  const compiledContract = typeof contract === 'string' ? parse(contract) : contract;
+  return 'sierra_program' in compiledContract;
+}
+
+export function extractContractHashes(
+  payload: DeclareContractPayload
+): CompleteDeclareContractPayload {
+  const response = { ...payload } as CompleteDeclareContractPayload;
+
+  if (isSierra(payload.contract)) {
+    if (!payload.compiledClassHash && payload.casm) {
+      response.compiledClassHash = computeCompiledClassHash(payload.casm);
+    }
+    if (!response.compiledClassHash)
+      throw new Error(
+        'Extract compiledClassHash failed, provide (CairoAssembly).casm file or compiledClassHash'
+      );
+  }
+
+  response.classHash = payload.classHash ?? computeContractClassHash(payload.contract);
+  if (!response.classHash)
+    throw new Error('Extract classHash failed, provide (CompiledContract).json file or classHash');
+
+  return response;
+}
diff --git a/src/utils/hash.ts b/src/utils/hash.ts
index c6c5bfb2..c7c5d086 100644
--- a/src/utils/hash.ts
+++ b/src/utils/hash.ts
@@ -1,4 +1,3 @@
-import { sort } from 'json-keys-sort';
 /* eslint-disable no-param-reassign */
 /* eslint-disable import/extensions */
 import { keccak, poseidonHashMany } from 'micro-starknet';
@@ -7,12 +6,12 @@ import { API_VERSION, MASK_250, StarknetChainId, TransactionHashPrefix } from '.
 import {
   Builtins,
   CompiledContract,
-  CompiledSiera,
-  CompiledSieraCasm,
+  CompiledSierra,
+  CompiledSierraCasm,
   ContractEntryPointFields,
-  Hints,
+  LegacyCompiledContract,
   RawCalldata,
-  SieraContractEntryPointFields,
+  SierraContractEntryPointFields,
 } from '../types/lib';
 import { felt } from './calldata/cairo';
 import { starkCurve } from './ec';
@@ -32,6 +31,7 @@ import { encodeShortString } from './shortString';
 export * as poseidon from '@noble/curves/abstract/poseidon';
 
 export const transactionVersion = 1n;
+export const transactionVersion_2 = 2n;
 export const feeTransactionVersion = 2n ** 128n + transactionVersion;
 
 export function keccakBn(value: BigNumberish): string {
@@ -140,7 +140,8 @@ export function calculateDeclareTransactionHash(
   version: BigNumberish,
   maxFee: BigNumberish,
   chainId: StarknetChainId,
-  nonce: BigNumberish
+  nonce: BigNumberish,
+  compiledClassHash?: string
 ): string {
   return calculateTransactionHashCommon(
     TransactionHashPrefix.DECLARE,
@@ -150,7 +151,7 @@ export function calculateDeclareTransactionHash(
     [classHash],
     maxFee,
     chainId,
-    [nonce]
+    [nonce, ...(compiledClassHash ? [compiledClassHash] : [])]
   );
 }
 
@@ -229,7 +230,7 @@ function nullSkipReplacer(key: string, value: any) {
   return value === null ? undefined : value;
 }
 
-function formatSpaces(json: string) {
+export function formatSpaces(json: string) {
   let insideQuotes = false;
   let newString = '';
   // eslint-disable-next-line no-restricted-syntax
@@ -247,7 +248,7 @@ function formatSpaces(json: string) {
   return newString;
 }
 
-export default function computeHintedClassHash(compiledContract: CompiledContract) {
+export default function computeHintedClassHash(compiledContract: LegacyCompiledContract) {
   const { abi, program } = compiledContract;
   const contractClass = { abi, program };
   const serializedJson = formatSpaces(stringify(contractClass, nullSkipReplacer));
@@ -256,9 +257,9 @@ export default function computeHintedClassHash(compiledContract: CompiledContrac
 }
 
 // Computes the class hash of a given contract class
-export function computeLegacyContractClassHash(contract: CompiledContract | string) {
+export function computeLegacyContractClassHash(contract: LegacyCompiledContract | string) {
   const compiledContract =
-    typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;
+    typeof contract === 'string' ? (parse(contract) as LegacyCompiledContract) : contract;
 
   const apiVersion = toHex(API_VERSION);
 
@@ -309,34 +310,7 @@ function hashEntryPoint(data: ContractEntryPointFields[]) {
   return poseidonHashMany(base);
 }
 
-function parseHints(hints: Hints) {
-  return hints.reduce((cum, [hint_id, hint_codes]) => {
-    cum[hint_id] = hint_codes.map((it) => ({
-      code: it,
-      accessible_scopes: [],
-      flow_tracking_data: { ap_tracking: { group: 0, offset: 0 }, reference_ids: {} },
-    }));
-    return cum;
-  }, {} as any);
-}
-
-// Possible StarkWare will change to better hashing without stringify before testnet!
-function hintedProgram(casm: CompiledSieraCasm) {
-  const sortedHintedProgram = sort({
-    program: {
-      prime: casm.prime,
-      data: casm.bytecode,
-      builtins: [],
-      hints: parseHints(casm.hints),
-      compiler_version: casm.compiler_version,
-    },
-  });
-
-  const serialized = formatSpaces(stringify(sortedHintedProgram));
-  return BigInt(addHexPrefix(starkCurve.keccak(utf8ToArray(serialized)).toString(16)));
-}
-
-export function computeCompiledClassHash(casm: CompiledSieraCasm) {
+export function computeCompiledClassHash(casm: CompiledSierraCasm) {
   const COMPILED_CLASS_VERSION = 'COMPILED_CLASS_V1';
 
   // Hash compiled class version
@@ -351,9 +325,6 @@ export function computeCompiledClassHash(casm: CompiledSieraCasm) {
   // Hash constructor entry points.
   const constructor = hashEntryPoint(casm.entry_points_by_type.CONSTRUCTOR);
 
-  // Hash hintedCompiledClassHash. ( starknet_keccak of the contract program, including its hints.)
-  const hintedCompiledClassHash = hintedProgram(casm);
-
   // Hash bytecode.
   const bytecode = poseidonHashMany(casm.bytecode.map((it: string) => BigInt(it)));
 
@@ -363,44 +334,43 @@ export function computeCompiledClassHash(casm: CompiledSieraCasm) {
       externalEntryPointsHash,
       l1Handlers,
       constructor,
-      hintedCompiledClassHash,
       bytecode,
     ])
   );
 }
 
-function hashEntryPointSiera(data: SieraContractEntryPointFields[]) {
+function hashEntryPointSierra(data: SierraContractEntryPointFields[]) {
   const base = data.flatMap((it: any) => {
     return [BigInt(it.selector), BigInt(it.function_idx)];
   });
   return poseidonHashMany(base);
 }
 
-function hashAbi(siera: CompiledSiera) {
-  const indentString = stringify(siera.abi, null, 2);
+function hashAbi(sierra: CompiledSierra) {
+  const indentString = formatSpaces(stringify(sierra.abi, null));
   return BigInt(addHexPrefix(starkCurve.keccak(utf8ToArray(indentString)).toString(16)));
 }
 
-export function computeSieraContractClassHash(siera: CompiledSiera) {
+export function computeSierraContractClassHash(sierra: CompiledSierra) {
   const CONTRACT_CLASS_VERSION = 'CONTRACT_CLASS_V0.1.0';
 
   // Hash class version
   const compiledClassVersion = BigInt(encodeShortString(CONTRACT_CLASS_VERSION));
 
   // Hash external entry points.
-  const externalEntryPointsHash = hashEntryPointSiera(siera.entry_points_by_type.EXTERNAL);
+  const externalEntryPointsHash = hashEntryPointSierra(sierra.entry_points_by_type.EXTERNAL);
 
   // Hash L1 handler entry points.
-  const l1Handlers = hashEntryPointSiera(siera.entry_points_by_type.L1_HANDLER);
+  const l1Handlers = hashEntryPointSierra(sierra.entry_points_by_type.L1_HANDLER);
 
   // Hash constructor entry points.
-  const constructor = hashEntryPointSiera(siera.entry_points_by_type.CONSTRUCTOR);
+  const constructor = hashEntryPointSierra(sierra.entry_points_by_type.CONSTRUCTOR);
 
   // Hash abi_hash.
-  const abiHash = hashAbi(siera);
+  const abiHash = hashAbi(sierra);
 
   // Hash Sierra program.
-  const sieraProgram = poseidonHashMany(siera.sierra_program.map((it: string) => BigInt(it)));
+  const sierraProgram = poseidonHashMany(sierra.sierra_program.map((it: string) => BigInt(it)));
 
   return toHex(
     poseidonHashMany([
@@ -409,22 +379,22 @@ export function computeSieraContractClassHash(siera: CompiledSiera) {
       l1Handlers,
       constructor,
       abiHash,
-      sieraProgram,
+      sierraProgram,
     ])
   );
 }
 
 /**
- * Compute ClassHash (siera or legacy) based on provided contract
- * @param contract CompiledContract | CompiledSiera | string
+ * Compute ClassHash (sierra or legacy) based on provided contract
+ * @param contract CompiledContract | CompiledSierra | string
  * @returns HexString ClassHash
  */
-export function computeContractClassHash(contract: CompiledContract | CompiledSiera | string) {
+export function computeContractClassHash(contract: CompiledContract | string) {
   const compiledContract = typeof contract === 'string' ? parse(contract) : contract;
 
   if ('sierra_program' in compiledContract) {
-    return computeSieraContractClassHash(compiledContract as CompiledSiera);
+    return computeSierraContractClassHash(compiledContract as CompiledSierra);
   }
 
-  return computeLegacyContractClassHash(compiledContract as CompiledContract);
+  return computeLegacyContractClassHash(compiledContract as LegacyCompiledContract);
 }
diff --git a/src/utils/provider.ts b/src/utils/provider.ts
index 329687cf..e938874e 100644
--- a/src/utils/provider.ts
+++ b/src/utils/provider.ts
@@ -1,5 +1,7 @@
-import { CompiledContract, ContractClass, RawCalldata } from '../types';
-import { parse } from './json';
+import { CompiledContract, ContractClass, RawCalldata, SierraContractClass } from '../types';
+import { isSierra } from './contract';
+import { formatSpaces } from './hash';
+import { parse, stringify } from './json';
 import { isHex, toHex } from './num';
 import { compressProgram } from './stark';
 
@@ -18,11 +20,27 @@ export function parseCalldata(calldata: RawCalldata = []) {
   });
 }
 
+export function createSierraContractClass(contract: SierraContractClass): any {
+  const result = { ...contract } as any;
+  delete result.sierra_program_debug_info;
+  result.abi = formatSpaces(stringify(contract.abi));
+  result.sierra_program = formatSpaces(stringify(contract.sierra_program));
+  result.sierra_program = compressProgram(result.sierra_program);
+  return result;
+}
+
+// TODO: How can we receive string here ?
 export function parseContract(contract: CompiledContract | string) {
   const parsedContract =
     typeof contract === 'string' ? (parse(contract) as CompiledContract) : contract;
-  return {
-    ...parsedContract,
-    program: compressProgram(parsedContract.program),
-  } as ContractClass;
+
+  if (!isSierra(contract)) {
+    return {
+      ...parsedContract,
+      // TODO: Why do we gzip program object?
+      ...('program' in parsedContract && { program: compressProgram(parsedContract.program) }),
+    } as ContractClass;
+  }
+
+  return createSierraContractClass(parsedContract as SierraContractClass);
 }
diff --git a/src/utils/responseParser/rpc.ts b/src/utils/responseParser/rpc.ts
index bb8e6390..17f4f8de 100644
--- a/src/utils/responseParser/rpc.ts
+++ b/src/utils/responseParser/rpc.ts
@@ -46,6 +46,7 @@ export class RPCResponseParser
     return {
       calldata: res.calldata || [],
       contract_address: res.contract_address,
+      sender_address: res.contract_address,
       max_fee: res.max_fee,
       nonce: res.nonce,
       signature: res.signature || [],
diff --git a/src/utils/responseParser/sequencer.ts b/src/utils/responseParser/sequencer.ts
index a81b602d..d3644d16 100644
--- a/src/utils/responseParser/sequencer.ts
+++ b/src/utils/responseParser/sequencer.ts
@@ -38,8 +38,6 @@ export class SequencerAPIResponseParser extends ResponseParser {
     return {
       ...res,
       calldata: 'calldata' in res.transaction ? (res.transaction.calldata as Array<string>) : [],
-      contract_address:
-        'contract_address' in res.transaction ? res.transaction.contract_address : undefined,
       contract_class:
         'contract_class' in res.transaction ? (res.transaction.contract_class as any) : undefined,
       entry_point_selector:
@@ -198,26 +196,19 @@ export class SequencerAPIResponseParser extends ResponseParser {
   }
 
   public parseGetStateUpdateResponse(res: Sequencer.StateUpdateResponse): StateUpdateResponse {
-    const nonces = [].concat(res.state_diff.nonces as []).map(({ contract_address, nonce }) => {
-      return {
-        contract_address,
-        nonce: nonce as string,
-      };
-    });
-    const storage_diffs = []
-      .concat(res.state_diff.storage_diffs as [])
-      .map(({ address, storage_entries }) => {
-        return {
-          address,
-          storage_entries,
-        };
-      });
+    const nonces = Object.entries(res.state_diff.nonces).map(([contract_address, nonce]) => ({
+      contract_address,
+      nonce,
+    }));
+    const storage_diffs = Object.entries(res.state_diff.storage_diffs).map(
+      ([address, storage_entries]) => ({ address, storage_entries })
+    );
+
     return {
       ...res,
       state_diff: {
+        ...res.state_diff,
         storage_diffs,
-        declared_contract_hashes: res.state_diff.declared_contract_hashes,
-        deployed_contracts: res.state_diff.deployed_contracts,
         nonces,
       },
     };
diff --git a/www/docs/API/Provider/sequencerProvider.md b/www/docs/API/Provider/sequencerProvider.md
index d923beca..bf6e01ba 100644
--- a/www/docs/API/Provider/sequencerProvider.md
+++ b/www/docs/API/Provider/sequencerProvider.md
@@ -63,7 +63,7 @@ Gets the smart contract address on the network.
 
 ```typescript
 {
-  bytecode: string[];
+  bytecode: ByteCode;
   abi: Abi;
 }
 ```


Test patch:
diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml
index 063e5a22..f8dd2ed7 100644
--- a/.github/workflows/_test.yml
+++ b/.github/workflows/_test.yml
@@ -19,7 +19,15 @@ jobs:
     # TODO - periodically check if conditional services are supported; https://github.com/actions/runner/issues/822
     services:
       devnet:
-        image: shardlabs/starknet-devnet:0.4.4-seed0
+        # TODO - The image utilized is a temporary workaround to allow for the RPC request validation
+        # deactivation argument to be set since the service configuration lacks a corresponding
+        # functionality; https://github.com/actions/runner/issues/2276.
+        # It was generated from the following Dockerfile:
+        #   FROM shardlabs/starknet-devnet:0.5.0a0-seed0
+        #   CMD ["--disable-rpc-request-validation"]
+        # Switch back to the standard Devnet image once a full release is available.
+        image: penovicp/devnet-test:0.5.0a0
+        # image: shardlabs/starknet-devnet:0.5.0a0-seed0
         ports:
           - 5050:5050
 
diff --git a/.github/workflows/manual-tests-devnet.yml b/.github/workflows/manual-tests-devnet.yml
index 39f2803c..23462e25 100644
--- a/.github/workflows/manual-tests-devnet.yml
+++ b/.github/workflows/manual-tests-devnet.yml
@@ -1,10 +1,11 @@
-name: Manual Devnet Test
+name: Manual Test Devnet
 on: workflow_dispatch
 
 jobs:
   tests:
     name: Run test on ${{ matrix.name }}
     strategy:
+      fail-fast: false
       matrix:
         name: [sequencer-devnet, rpc-devnet]
         include:
diff --git a/.github/workflows/manual-tests-testnet.yml b/.github/workflows/manual-tests-testnet.yml
index 9b49ac09..8cd2ec40 100644
--- a/.github/workflows/manual-tests-testnet.yml
+++ b/.github/workflows/manual-tests-testnet.yml
@@ -1,4 +1,4 @@
-name: Manual Testnet Test
+name: Manual Test Testnet
 on: workflow_dispatch
 
 jobs:
diff --git a/__tests__/account.test.ts b/__tests__/account.test.ts
index 6f88ec6b..f8d37aed 100644
--- a/__tests__/account.test.ts
+++ b/__tests__/account.test.ts
@@ -8,6 +8,8 @@ import { encodeShortString } from '../src/utils/shortString';
 import { randomAddress } from '../src/utils/stark';
 import {
   compiledErc20,
+  compiledHelloSierra,
+  compiledHelloSierraCasm,
   compiledNamingContract,
   compiledOpenZeppelinAccount,
   compiledStarknetId,
@@ -493,3 +495,22 @@ describe('deploy and test Wallet', () => {
     });
   });
 });
+
+describeIfDevnetSequencer('not implemented for RPC', () => {
+  // Testnet will not accept declare v2 with same compiledClassHash,
+  // aka. we can't redeclare same contract
+  describe('Test Cairo 1', () => {
+    const provider = getTestProvider();
+    const account = getTestAccount(provider);
+    initializeMatcher(expect);
+
+    test('Declare v2 - Hello Cairo 1 contract', async () => {
+      const declareTx = await account.declare({
+        contract: compiledHelloSierra,
+        casm: compiledHelloSierraCasm,
+      });
+      await provider.waitForTransaction(declareTx.transaction_hash);
+      expect(declareTx).toMatchSchemaRef('DeclareContractResponse');
+    });
+  });
+});
diff --git a/__tests__/fixtures.ts b/__tests__/fixtures.ts
index 06944147..19098ab0 100644
--- a/__tests__/fixtures.ts
+++ b/__tests__/fixtures.ts
@@ -3,24 +3,24 @@ import path from 'path';
 
 import { Account, ProviderInterface, RpcProvider, SequencerProvider, json } from '../src';
 import {
-  CompiledContract,
-  CompiledSiera,
-  CompiledSieraCasm,
+  CompiledSierra,
+  CompiledSierraCasm,
+  LegacyCompiledContract,
   waitForTransactionOptions,
 } from '../src/types';
 import { toHex } from '../src/utils/num';
 
-const readContract = (name: string): CompiledContract =>
+const readContract = (name: string): LegacyCompiledContract =>
   json.parse(
     fs.readFileSync(path.resolve(__dirname, `../__mocks__/${name}.json`)).toString('ascii')
   );
 
-const readContractSieraCasm = (name: string): CompiledSieraCasm =>
+const readContractSierraCasm = (name: string): CompiledSierraCasm =>
   json.parse(
     fs.readFileSync(path.resolve(__dirname, `../__mocks__/${name}.casm`)).toString('ascii')
   );
 
-const readContractSiera = (name: string): CompiledSiera =>
+const readContractSierra = (name: string): CompiledSierra =>
   json.parse(
     fs.readFileSync(path.resolve(__dirname, `../__mocks__/${name}.json`)).toString('ascii')
   );
@@ -34,8 +34,8 @@ export const compiledMulticall = readContract('multicall');
 export const compiledTestDapp = readContract('TestDapp');
 export const compiledStarknetId = readContract('starknetId_compiled');
 export const compiledNamingContract = readContract('naming_compiled');
-export const compiledHelloSiera = readContractSiera('cairo/helloSiera/hello');
-export const compiledHelloSieraCasm = readContractSieraCasm('cairo/helloSiera/hello');
+export const compiledHelloSierra = readContractSierra('cairo/helloSierra/hello');
+export const compiledHelloSierraCasm = readContractSierraCasm('cairo/helloSierra/hello');
 
 /* Default test config based on run `starknet-devnet --seed 0` */
 const DEFAULT_TEST_PROVIDER_SEQUENCER_URL = 'http://127.0.0.1:5050/';
@@ -103,6 +103,7 @@ export const getTestAccount = (provider: ProviderInterface) => {
 const describeIf = (condition: boolean) => (condition ? describe : describe.skip);
 export const describeIfSequencer = describeIf(IS_SEQUENCER);
 export const describeIfRpc = describeIf(IS_RPC);
+export const describeIfNotRpc = describeIf(!IS_RPC);
 export const describeIfNotDevnet = describeIf(!IS_LOCALHOST_DEVNET);
 export const describeIfDevnet = describeIf(IS_LOCALHOST_DEVNET);
 export const describeIfDevnetRpc = describeIf(IS_DEVNET_RPC);
diff --git a/__tests__/utils/hash.test.ts b/__tests__/utils/hash.test.ts
index 08cdd97d..d4cdbffb 100644
--- a/__tests__/utils/hash.test.ts
+++ b/__tests__/utils/hash.test.ts
@@ -1,13 +1,13 @@
 import {
   computeCompiledClassHash,
   computeContractClassHash,
-  computeSieraContractClassHash,
+  computeSierraContractClassHash,
   getSelectorFromName,
 } from '../../src/utils/hash';
 import {
   compiledErc20,
-  compiledHelloSiera,
-  compiledHelloSieraCasm,
+  compiledHelloSierra,
+  compiledHelloSierraCasm,
   compiledOpenZeppelinAccount,
   compiledTestDapp,
   erc20ClassHash,
@@ -48,16 +48,16 @@ describe('Hash Tester', () => {
 
   describe('Compute CompiledClassHash & ClassHash Cairo1', () => {
     test('Hello - CompiledClassHash', () => {
-      const compiledClassHash = computeCompiledClassHash(compiledHelloSieraCasm);
+      const compiledClassHash = computeCompiledClassHash(compiledHelloSierraCasm);
       expect(compiledClassHash).toEqual(
-        '0x5308ae7d698bdb9cb9ee6e9c7dab4d3082a3db40933634645f179d9cad06446'
+        '0x5c82c98f2ab111bd50293ba64bb18cf49037374783ad2486c712709c4ba0d89'
       );
     });
 
     test('Hello - ClassHash', () => {
-      const classHash = computeSieraContractClassHash(compiledHelloSiera);
+      const classHash = computeSierraContractClassHash(compiledHelloSierra);
       expect(classHash).toEqual(
-        '0x1459fed7b388f717469285bd075305050a09cbc5478fe6c7b9ed3ec88701b47'
+        '0x345df0a9b35ce05d03772ba7938acad66921c5c39c1a5af74aee72aa25c363e'
       );
     });
   });