Skip to content
Open
Show file tree
Hide file tree
Changes from 148 commits
Commits
Show all changes
193 commits
Select commit Hold shift + click to select a range
dedaa34
merge with main repo latest changes
mortezashojaei Oct 16, 2024
4f541e3
Merge remote-tracking branch 'origin-root/main'
mortezashojaei Oct 22, 2024
f10e542
Merge remote-tracking branch 'origin-root/main'
mortezashojaei Oct 25, 2024
36e2b00
Merge remote-tracking branch 'origin-root/main'
mortezashojaei Oct 28, 2024
b4390e7
feat: starknet deployer module
mortezashojaei Oct 28, 2024
02f664a
feat: starknet contracts & workspace
ljankovic-txfusion Oct 28, 2024
c0f8401
feat: build starknet core and import on sdk
mortezashojaei Oct 28, 2024
8e4c754
minor: fix starknet contracts name prefix
mortezashojaei Oct 29, 2024
8774747
fix: do not write starknet deployments in seprated files
mortezashojaei Oct 30, 2024
0569af5
feat: starknet core module base
mortezashojaei Oct 30, 2024
8cb1c09
Merge remote-tracking branch 'origin-root/main' into feat/starknet-de…
mortezashojaei Nov 4, 2024
626e7f3
minor: simplify starknet deployer
mortezashojaei Nov 4, 2024
98a59fe
feat: make starknet deployer usable for cli use cases
mortezashojaei Nov 4, 2024
8be1d66
feat: define starknet as a protocol
mortezashojaei Nov 4, 2024
fedf478
feat: pow deploying starknet contract with cli
mortezashojaei Nov 4, 2024
f75b15b
feat: deploy ism in core deployment
mortezashojaei Nov 6, 2024
7e229df
feat: deploy hooks and isms, in core deploy and connect them to mailbox
mortezashojaei Nov 6, 2024
43c28e5
feat: deployMailbox function on starknet core module
mortezashojaei Nov 7, 2024
df47542
feat: StarknetCoreModule :: update function
mortezashojaei Nov 7, 2024
c440796
feat: StarknetCoreModule:: read function
mortezashojaei Nov 7, 2024
2dcc47b
minor: cleanup
mortezashojaei Nov 7, 2024
63fcc2f
feat: include update owner in owner function
mortezashojaei Nov 7, 2024
ba0d6ea
feat: Singe/MultiVM signer strategy
ljankovic-txfusion Nov 7, 2024
e5c1825
merge: latest changes on main
mortezashojaei Nov 7, 2024
21c6474
cleanup: manage core deploy with switching over protocol types
mortezashojaei Nov 8, 2024
006b1a2
feat: read chain domain id from configs for starknet
mortezashojaei Nov 8, 2024
de52d1b
feat: read protocol fee hook config from chain config
mortezashojaei Nov 8, 2024
b0b682c
cleanup: deploy ism function
mortezashojaei Nov 8, 2024
2bf349b
feat: Deployment strategies & refactoring
ljankovic-txfusion Nov 8, 2024
af3766b
temp: starknet reader classes
mortezashojaei Nov 8, 2024
bbfd317
feat: register starknet chains
mortezashojaei Nov 11, 2024
9c43d1c
fix: e2e test working
ljankovic-txfusion Nov 11, 2024
3602abd
chore: add comments & minor refactoring
ljankovic-txfusion Nov 11, 2024
ce81b48
chore: minor fixes
ljankovic-txfusion Nov 12, 2024
ff2b4c9
Merge remote-tracking branch 'origin-root/main'
ljankovic-txfusion Nov 12, 2024
af97d7f
Merge remote-tracking branch 'origin-root/main'
ljankovic-txfusion Nov 12, 2024
63c4865
fix: ism and hook redeader
mortezashojaei Nov 12, 2024
1b1214d
Merge remote-tracking branch 'origin-root/main' into feat/starknet-de…
mortezashojaei Nov 12, 2024
e4839a1
perf: removed unused code and refactoring
ljankovic-txfusion Nov 12, 2024
4abd806
feat: masked pk, refactoring
ljankovic-txfusion Nov 13, 2024
188dced
feat: MultiChainHandler support to extract chains from WarpCoreConfig…
ljankovic-txfusion Nov 14, 2024
0b92c68
chore: refactoring & adding comments
ljankovic-txfusion Nov 15, 2024
ea205dc
Merge remote-tracking branch 'origin/main' into feat/key-command
ljankovic-txfusion Nov 15, 2024
2ed8911
Merge remote-tracking branch 'origin-txfusion/main' into feat/starknet
mortezashojaei Nov 15, 2024
4360874
fix: handle numeric domainId while we have string chainID
mortezashojaei Nov 15, 2024
ac6d5c1
feat: relay command chain resolver strategy & refactoring
ljankovic-txfusion Nov 15, 2024
eeec6c9
fix: change lenght of starknet domainId
mortezashojaei Nov 18, 2024
925621c
feat: Signer strategy based on chain's protocol/tech stack
ljankovic-txfusion Nov 18, 2024
a0ea88b
chore: minor refactoring
ljankovic-txfusion Nov 18, 2024
f030f23
Merge remote-tracking branch 'origin/main' into feat/key-command
ljankovic-txfusion Nov 18, 2024
52efa81
add: strategy types for submitter
ljankovic-txfusion Nov 18, 2024
12679af
chore: following naming conventions & comments
ljankovic-txfusion Nov 18, 2024
294c17c
feat: manage warp deploy based on protocol
mortezashojaei Nov 18, 2024
b7d439b
feat: requiresKey options on strategy `read` command
ljankovic-txfusion Nov 19, 2024
24b9d7a
chore: revert MessageOptionsArgTypes origin & destination optionality
ljankovic-txfusion Nov 19, 2024
60a2ae2
feat: strategy init chain agnostic
ljankovic-txfusion Nov 20, 2024
884db14
feat: logging private key source
ljankovic-txfusion Nov 20, 2024
7a5fc2c
feat: support loading token contract files on @hyperlane-xyz/starknet
mortezashojaei Nov 20, 2024
2cc7ca4
chore: MultiProtocolSignerOptions refactor
ljankovic-txfusion Nov 20, 2024
d7326a6
docs(changeset): Added strategy management CLI commands and MultiProt…
ljankovic-txfusion Nov 20, 2024
a9df9e8
feat: integrate zksync-ethers wallet for ZKSync signer strategy
ljankovic-txfusion Nov 21, 2024
81a6ba7
feat: support erc20 deployment on both starknet and evm chains
mortezashojaei Nov 21, 2024
78d1089
feat: integrate MultiProtocolProvider into signer middleware and manager
ljankovic-txfusion Nov 21, 2024
f5dd6eb
feat: import MultiProtocolProvider into MultiProtocolSignerManager
ljankovic-txfusion Nov 21, 2024
182fc36
feat: add Starknet protocol support to SDK
ljankovic-txfusion Nov 21, 2024
e233bfa
feat: read token metadata on starknte erc20 deployer module
mortezashojaei Nov 21, 2024
6561504
refactor: improve signer management in warp route deploy config creation
ljankovic-txfusion Nov 21, 2024
baac1a3
Merge branch 'main' into feat/starknet
mortezashojaei Nov 22, 2024
e532b1a
refactor: improve strategy config handling and type safety & sensitiv…
ljankovic-txfusion Nov 22, 2024
afb3b21
refactor: sensitive key function name
ljankovic-txfusion Nov 22, 2024
ef16d8e
feat: make warp deploy work on starknet for native/synthetic tokens b…
mortezashojaei Nov 22, 2024
fc1188a
docs(changeset): Added `isPrivateKeyEvm` function for validating EVM …
ljankovic-txfusion Nov 22, 2024
366aab5
refactor: simplify address validation and reorganize chain utils
ljankovic-txfusion Nov 22, 2024
e6ce0c8
Merge remote-tracking branch 'origin/feat/key-command' into feat/zksy…
ljankovic-txfusion Nov 22, 2024
52ee4cc
Merge remote-tracking branch 'origin/feat/key-command' into feat/star…
ljankovic-txfusion Nov 22, 2024
0b793c7
chore: change cli changeset to minor
ljankovic-txfusion Nov 22, 2024
24b0c55
refactor: update SignerConfig address type to use Address from hyperl…
ljankovic-txfusion Nov 25, 2024
2076ef6
refactor: move CommandType enum to signCommands.ts
ljankovic-txfusion Nov 25, 2024
7c6f8c0
Merge branch 'feat/add-starknet-provider' into feat/starknet-signer
mortezashojaei Nov 25, 2024
e61baff
fix: passed key used for setting signer
ljankovic-txfusion Nov 25, 2024
9e8a2aa
feat: support starknet signer by implementing starknet signer strategy
mortezashojaei Nov 26, 2024
6d0e2a6
Merge remote-tracking branch 'origin-root/main' into feat/starknet-si…
mortezashojaei Nov 26, 2024
2d08d1e
Merge remote-tracking branch 'origin/main' into feat/key-command
mortezashojaei Nov 27, 2024
92115c0
fix: update getWarpCoreConfigOrExit import on MultiChainResolver
mortezashojaei Nov 27, 2024
c6cc7e9
Merge remote-tracking branch 'origin-root/main'
mortezashojaei Nov 27, 2024
0c8dc01
Merge remote-tracking branch 'origin-root/main' into feat/key-command
mortezashojaei Nov 27, 2024
ccc7df6
fix: no-unused-vars linting issues
mortezashojaei Nov 27, 2024
bdf0107
minor: remove catch unused param
mortezashojaei Nov 27, 2024
e13e08a
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Nov 28, 2024
2258bbc
Merge branch 'feat/key-command' into feat/zksync-signer-strategy
mortezashojaei Nov 28, 2024
d6c3c75
Merge remote-tracking branch 'origin-root/main' into feat/zksync-sign…
mortezashojaei Nov 28, 2024
0546e10
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Nov 28, 2024
dd87034
docs(changeset): Added ZKSync signer support using zksync-ethers package
mortezashojaei Nov 28, 2024
2ee37d4
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Nov 28, 2024
55a9601
Merge remote-tracking branch 'origin-root/main' into feat/starknet
mortezashojaei Nov 29, 2024
d77f2e7
Merge remote-tracking branch 'origin-root/main' into feat/starknet-si…
mortezashojaei Nov 29, 2024
6f76ac6
Merge branch 'feat/starknet-signer' into feat/starknet
mortezashojaei Nov 29, 2024
3f58da3
fix: exclude starknet on widget protocol type
mortezashojaei Nov 29, 2024
78bc56c
Merge remote-tracking branch 'origin-txfusion/feat/add-starknet-provi…
mortezashojaei Nov 29, 2024
22a00ff
fix: modify getWarpCoreConfigOrExit function import path
mortezashojaei Nov 29, 2024
159e8c6
fix: read user address from strategy submitter
mortezashojaei Nov 29, 2024
5c9d890
fix: use starknet strategy for core deployment
mortezashojaei Nov 29, 2024
7770bd7
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Nov 29, 2024
21758af
fix: read multiProtocolSigner from sginer middleware on warp init
mortezashojaei Nov 29, 2024
2ff2f04
Merge branch 'feat/key-command' into feat/starknet
mortezashojaei Dec 2, 2024
0acfcbf
refactor: implement MultiProtocolSigner for Starknet warp deployments
mortezashojaei Dec 2, 2024
9b5fc4f
temp: make starknet send message work
mortezashojaei Dec 4, 2024
38310f8
refactor: standardize signer address handling on context
mortezashojaei Dec 4, 2024
6e437c7
feat(cli): Add 'check' command to SIGN_COMMANDS and use signer for co…
mortezashojaei Dec 4, 2024
4820623
fix: handle warp check as a sign command on signer strategies
mortezashojaei Dec 4, 2024
3146e93
fix: handle warp read and warp check as sign command temporary
mortezashojaei Dec 4, 2024
fa2b0e8
chore: fix typo
mortezashojaei Dec 5, 2024
7d6a156
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Dec 5, 2024
250b2b1
Merge branch 'feat/key-command' into feat/zksync-signer-strategy
mortezashojaei Dec 5, 2024
b90d0f7
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Dec 5, 2024
80533e1
Merge branch 'main' into feat/key-command
mortezashojaei Dec 5, 2024
293e1b2
Merge branch 'feat/key-command' into feat/zksync-signer-strategy
mortezashojaei Dec 5, 2024
4e3b65c
chore: modify type of signer on context
mortezashojaei Dec 5, 2024
ea2cf3a
Merge branch 'feat/key-command' into feat/zksync-signer-strategy
mortezashojaei Dec 5, 2024
154c993
fix: starknet contract files build
mortezashojaei Dec 5, 2024
c33d90f
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Dec 6, 2024
e3fba6a
Merge branch 'hyperlane-xyz:main' into main
mshojaei-txfusion Dec 9, 2024
a45c50a
Merge branch 'hyperlane-xyz:main' into main
ljankovic-txfusion Dec 10, 2024
c7718e7
feat: add starknet contracts build files as a new workspace
mortezashojaei Dec 10, 2024
fe63c80
improvement: remove unused .md5 and .sha256 files on starknet releases
mortezashojaei Dec 10, 2024
5d0dd89
feat: support different contract types import for starknet (contract,…
mortezashojaei Dec 10, 2024
86996e1
Merge remote-tracking branch 'origin' into feat/zksync-signer-strategy
ljankovic-txfusion Dec 11, 2024
b118669
Merge branch 'main' of github.com:hyperlane-xyz/hyperlane-monorepo in…
ljankovic-txfusion Dec 11, 2024
394055f
feat: replace Ethers Wallet with ZKSync-specific wallet implementatio…
ljankovic-txfusion Dec 11, 2024
576744b
Merge branch 'hyperlane-xyz:main' into main
ljankovic-txfusion Dec 11, 2024
6c786de
Merge branch 'main' of github.com:hyperlane-xyz/hyperlane-monorepo in…
ljankovic-txfusion Dec 11, 2024
b58434e
refactor(cli): remove unused multiProtocolSigner from warp init command
ljankovic-txfusion Dec 11, 2024
9139d9b
refactor: cleanup, simplify and remove redundant parts of starknet-core
mortezashojaei Dec 11, 2024
8f7d04d
Merge branch 'hyperlane-xyz:main' into main
ljankovic-txfusion Dec 11, 2024
e16b0e3
Merge branch 'hyperlane-xyz:main' into main
ljankovic-txfusion Dec 12, 2024
b6fc019
Merge branch 'main' into feat/zksync-signer-strategy
ljankovic-txfusion Dec 12, 2024
9ed558c
refactor: streamline package structure and build process
mortezashojaei Dec 12, 2024
f8a08cb
improvement: setup linter and preittier for starknet sdk
mortezashojaei Dec 12, 2024
a281c8d
Merge remote-tracking branch 'origin/feat/zksync-signer-strategy' int…
ljankovic-txfusion Dec 12, 2024
736ac63
Merge remote-tracking branch 'origin/feat/zksync-signer-strategy' int…
ljankovic-txfusion Dec 12, 2024
97aeebc
Merge remote-tracking branch 'origin/feat/starknet-signer' into feat/…
ljankovic-txfusion Dec 13, 2024
6c3d40f
Merge remote-tracking branch 'origin/feat/add-starknet-provider' into…
ljankovic-txfusion Dec 13, 2024
4207411
merge: starknet core contracts sdk
mortezashojaei Dec 13, 2024
6d0219e
fix: use token contract type for starknet token deployment for warp r…
mortezashojaei Dec 13, 2024
16501ca
refactor: simplify MultiProtocolSignerManager and remove unused strat…
ljankovic-txfusion Dec 13, 2024
cead00e
Merge branch 'feat/starknet-signer-strategy' into feat/starknet
ljankovic-txfusion Dec 13, 2024
cdcf182
Merge remote-tracking branch 'origin/improvement/starknet-core' into …
ljankovic-txfusion Dec 13, 2024
6be7093
temp: make collateral <=> syntetic for starknet
mortezashojaei Dec 13, 2024
e4b4254
refactor: rename address to userAddress for consistency in signer con…
ljankovic-txfusion Dec 16, 2024
b2829fd
feat: deploy HypErc20Collateral contract during warp deploy
mortezashojaei Dec 16, 2024
8b701ea
Merge remote-tracking branch 'origin-txfusion/feat/starknet' into fea…
mortezashojaei Dec 17, 2024
27ff277
feat: use signer per chain for starkner warp deployments
mortezashojaei Dec 17, 2024
74695f6
feat: handle warp deploy submission for starknet chains
mortezashojaei Dec 17, 2024
7280776
feat: fullyConnectTokens after all protocol tokens deployed
mortezashojaei Dec 17, 2024
2af6c51
feat: starknet core, with send functionalities
mortezashojaei Dec 18, 2024
64681bf
fix: update starknet core version, use release that include compile f…
mortezashojaei Dec 18, 2024
6383696
feat: sending test message on starknet
ljankovic-txfusion Dec 18, 2024
7ddef19
fix: remove premature return to allow message delivery tracking
ljankovic-txfusion Dec 19, 2024
78dfba2
refactor: move multiProtocolSigner to context and cleanup message sen…
ljankovic-txfusion Dec 19, 2024
f8c927f
Merge pull request #17 from txfusion/feat/starknet-send
mshojaei-txfusion Dec 19, 2024
0d4d3e2
fix: update starknet native token warp deployment with latest cairo c…
mortezashojaei Dec 19, 2024
5899927
feat(agent-config): add Starknet chain support for start block fetching
mortezashojaei Dec 23, 2024
7c59375
fix: replace hardcoded starknet protocol fee and protocol fee max amd…
mortezashojaei Dec 24, 2024
f17180f
feat: cross chain enrollment, enroll for evm chains
mortezashojaei Dec 26, 2024
739912d
feat: enroll routers on starknet chains
mortezashojaei Dec 26, 2024
ba8e1d3
improvement: use batch enrollment on starknet routers
mortezashojaei Dec 26, 2024
645149c
fix(sdk): handle non-Ethereum addresses in StarknetERC20WarpModule
mortezashojaei Dec 26, 2024
9470d82
docs: add explanatory comments to StarknetCoreModule deployment flow
mortezashojaei Dec 27, 2024
aa6a41c
feat(starknet): add ownership clarification logs for MerkleTreeHook
mortezashojaei Dec 27, 2024
b7f8f9f
feat(starknet): add ownership clarification for ownable ISMs
mortezashojaei Dec 27, 2024
6d6c8ad
Merge remote-tracking branch 'origin/main' into feat/starknet
ljankovic-txfusion Mar 6, 2025
6f843cc
feat: Enhance warp deployment utilities
ljankovic-txfusion Mar 6, 2025
cab4337
Merge remote-tracking branch 'origin/main' into feat/starknet
ljankovic-txfusion Mar 13, 2025
9e50810
checkout: feat/starknet-core-package -- starknet
ljankovic-txfusion Mar 13, 2025
06f4d5e
fix: update warpRouteConfig type to require mailbox
ljankovic-txfusion Mar 13, 2025
f4e3fea
Merge remote-tracking branch 'origin/main' into feat/starknet
ljankovic-txfusion Mar 20, 2025
d05aa61
Merge remote-tracking branch 'origin/main' into feat/starknet
ljankovic-txfusion Mar 20, 2025
fc56dba
Merge remote-tracking branch 'origin/main' into feat/starknet
ljankovic-txfusion Mar 26, 2025
a0a7a1d
Merge remote-tracking branch 'origin/main' into feat/starknet
ljankovic-txfusion Apr 2, 2025
d31901e
feat: add cosmos related packages
ljankovic-txfusion Apr 24, 2025
b565fb8
chore: yarn install
ljankovic-txfusion Apr 24, 2025
12a42a7
chore: update ccip-server
ljankovic-txfusion Apr 24, 2025
eefd1a5
chore: merge typescript/infra & github-proxy packages from main
ljankovic-txfusion Apr 24, 2025
a2f4928
chore: merge utils package from main
ljankovic-txfusion Apr 24, 2025
1c261f3
chore: merge solidity from main
ljankovic-txfusion Apr 24, 2025
cc4d650
chore: merge rust from main
ljankovic-txfusion Apr 24, 2025
25662f4
chore: merge sdk package from main
ljankovic-txfusion Apr 24, 2025
488e990
chore: merge widgets from main
ljankovic-txfusion Apr 24, 2025
c49c082
chore: merge cli from main
ljankovic-txfusion Apr 24, 2025
a074a69
chore: merge starknet address utils
ljankovic-txfusion Apr 24, 2025
517a1c3
chore: yarn install
ljankovic-txfusion Apr 24, 2025
ded9462
chore: merge cli from feat/starknet-send-relayer
ljankovic-txfusion Apr 24, 2025
24e2531
chore: merge sdk from feat/starknet-send-relay
ljankovic-txfusion Apr 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/ten-spiders-trade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@hyperlane-xyz/cli': patch
---

Added ZKSync signer support using zksync-ethers package
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
},
"workspaces": [
"solidity",
"typescript/*"
"typescript/*",
"starknet"
],
"resolutions": {
"async": "^2.6.4",
Expand Down
6 changes: 6 additions & 0 deletions starknet/.eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"rules": {
"no-console": ["off"],
"no-restricted-imports": ["off"]
}
}
3 changes: 3 additions & 0 deletions starknet/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.env
dist
release
44 changes: 44 additions & 0 deletions starknet/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"name": "@hyperlane-xyz/starknet-core",
"description": "Core cairo contracts for Hyperlane",
"version": "0.2.1",
"type": "module",
"homepage": "https://www.hyperlane.xyz",
"license": "Apache-2.0",
"scripts": {
"prepare-contracts": "tsx ./scripts/fetch-contracts-if-missing.ts",
"build-contracts": "mkdir -p dist/target && cp release/* dist/target/",
"build": "tsc && yarn prepare-contracts && yarn build-contracts",
"clean": "rm -rf ./dist ./release",
"lint": "eslint src --ext .ts",
"prettier": "prettier --write ./src ./scripts ./package.json"
},
"exports": {
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"types": "./dist/index.d.ts",
"files": [
"/dist"
],
"keywords": [
"Hyperlane",
"Cairo",
"Starknet"
],
"engines": {
"node": ">=16"
},
"dependencies": {
"starknet": "6.11.0"
},
"devDependencies": {
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"prettier": "^2.8.8",
"tsx": "^4.7.1",
"typescript": "5.3.3"
}
}
23 changes: 23 additions & 0 deletions starknet/scripts/fetch-contracts-if-missing.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { execSync } from 'child_process';
import { existsSync } from 'fs';
import { join } from 'path';

const RELEASE_DIR = join(process.cwd(), 'release');

try {
if (existsSync(RELEASE_DIR)) {
console.log(
'[INFO] Contracts already present in src/release, skipping fetch',
);
process.exit(0);
}

console.log('[INFO] Fetching contracts...');
execSync('./scripts/fetch-contracts-release.sh', {
stdio: 'inherit',
cwd: join(process.cwd()),
});
} catch (error) {
console.error('[ERROR]', (error as Error).message);
process.exit(1);
}
151 changes: 151 additions & 0 deletions starknet/scripts/fetch-contracts-release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
#!/usr/bin/env bash

# Strict mode configuration
set -euo pipefail
IFS=$'\n\t'

# Constants
readonly REPO="astraly-labs/hyperlane_starknet"
readonly GITHUB_RELEASES_API="https://api.github.com/repos/${REPO}/releases"
readonly TARGET_DIR="./release"

# Color definitions
declare -r COLOR_GREEN='\033[0;32m'
declare -r COLOR_RED='\033[0;31m'
declare -r COLOR_RESET='\033[0m'

log_error() {
echo -e "${COLOR_RED}Error: $1${COLOR_RESET}" >&2
}

log_success() {
echo -e "${COLOR_GREEN}$1${COLOR_RESET}"
}

check_dependencies() {
local -r required_tools=("curl" "jq" "unzip")

for tool in "${required_tools[@]}"; do
if ! command -v "$tool" &> /dev/null; then
log_error "$tool is not installed"
exit 1
fi
done
}

get_package_version() {
local package_version
if ! package_version=$(jq -r '.version' ./package.json 2>/dev/null); then
log_error "Failed to read version from package.json"
exit 1
fi
echo "v${package_version}"
}

verify_version_exists() {
local version=$1
if ! curl --output /dev/null --silent --head --fail "${GITHUB_RELEASES_API}/tags/${version}"; then
log_error "Version ${version} does not exist"
exit 1
fi
}

get_release_info() {
local version=$1
local release_info

release_info=$(curl -sf "${GITHUB_RELEASES_API}/tags/${version}") || {
log_error "Failed to fetch release information for version ${version}"
exit 1
}
echo "$release_info"
}

download_and_extract() {
local version=$1
local download_url=$2
local base_url="${download_url%/*}"
local filename="${download_url##*/}"

if ! mkdir -p "$TARGET_DIR"; then
log_error "Failed to create target directory"
exit 1
fi

log_success "Downloading version ${version}..."

if ! curl -L "$download_url" -o "${TARGET_DIR}/release.zip"; then
log_error "Download failed"
exit 1
fi

if ! verify_checksum "${TARGET_DIR}/release.zip" "$base_url" "$filename"; then
rm -f "${TARGET_DIR}/release.zip"
exit 1
fi

if ! unzip -o "${TARGET_DIR}/release.zip" -d "${TARGET_DIR}"; then
log_error "Extraction failed"
exit 1
fi
}

verify_checksum() {
local file_path="$1"
local base_url="$2"
local filename="$3"
local checksum_filename
checksum_filename="${filename%.zip}.CHECKSUM"

local downloaded_checksum
downloaded_checksum="$(sha256sum "$file_path" | cut -d' ' -f1)"
log_success "File checksum: ${downloaded_checksum}"

local expected_checksum
if ! expected_checksum="$(curl -sL "${base_url}/${checksum_filename}")"; then
log_error "Failed to fetch checksum file"
return 1
fi

if [[ "${downloaded_checksum}" != "$(echo "${expected_checksum}" | awk '{print $1}')" ]]; then
log_error "Checksum verification failed"
return 1
fi

return 0
}

cleanup() {
rm -f "$TARGET_DIR/release.zip"
rm -f "$TARGET_DIR"/*.md5
rm -f "$TARGET_DIR"/*.sha256
}

main() {
trap cleanup EXIT

check_dependencies

local version
version=$(get_package_version)
log_success "Using version ${version} from package.json"
verify_version_exists "$version"

local release_info
release_info=$(get_release_info "$version")

local download_url
download_url=$(echo "$release_info" | jq -r '.assets[] | select(.name | startswith("hyperlane-starknet") and endswith(".zip")) | .browser_download_url')

if [[ -z "$download_url" ]]; then
log_error "Could not find ZIP download URL for release"
exit 1
fi

# Process download and file checksum verification and extraction
download_and_extract "$version" "$download_url"

log_success "Successfully downloaded and extracted version ${version}"
}

main
11 changes: 11 additions & 0 deletions starknet/src/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
export const CONFIG = {
COMPILED_CONTRACTS_DIR: 'target',
CONTRACT_FILE_SUFFIXES: {
SIERRA_JSON: '.contract_class.json', // Sierra is the high-level representation
ASSEMBLY_JSON: '.compiled_contract_class.json', // Cairo assembly (CASM) is the low-level bytecode
},
CONTRACT_ERROR_CODES: {
FILE_NOT_FOUND: 'FILE_NOT_FOUND',
PARSE_ERROR: 'PARSE_ERROR',
},
} as const;
6 changes: 6 additions & 0 deletions starknet/src/errors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export class ContractError extends Error {
constructor(public readonly code: string, public readonly details?: unknown) {
super(`[${code}] ${details ? JSON.stringify(details) : ''}`);
this.name = 'ContractError';
}
}
98 changes: 98 additions & 0 deletions starknet/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import { existsSync, readFileSync } from 'fs';
import { dirname, join } from 'path';
import { CairoAssembly, CompiledContract } from 'starknet';
import { fileURLToPath } from 'url';

import { CONFIG } from './config.js';
import { ContractError } from './errors.js';

const currentDirectory = dirname(fileURLToPath(import.meta.url));
const TARGET_DEV_PATH = join(currentDirectory, CONFIG.COMPILED_CONTRACTS_DIR);

/**
* @notice Retrieves and parses the standard compiled contract data
* @param name The name of the contract to retrieve
* @returns {CompiledContract} The parsed contract data
* @throws {ContractError} If the file is not found, cannot be parsed
*/
export const getCompiledContract = (
name: string,
contractType?: ContractType,
): CompiledContract => {
try {
return JSON.parse(
readFileSync(
findContractFile(name, 'SIERRA_JSON', contractType),
'utf-8',
),
);
} catch (error: unknown) {
if (error instanceof ContractError) throw error;
throw new ContractError(CONFIG.CONTRACT_ERROR_CODES.PARSE_ERROR, {
name,
error: (error as Error).message,
});
}
};

/**
* @notice Retrieves and parses the CASM compiled contract data
* @param name The name of the contract to retrieve
* @returns {CairoAssembly} The parsed CASM contract data
* @throws {ContractError} If the file is not found, cannot be parsed
*/
export const getCompiledContractCasm = (
name: string,
contractType?: ContractType,
): CairoAssembly => {
try {
return JSON.parse(
readFileSync(
findContractFile(name, 'ASSEMBLY_JSON', contractType),
'utf-8',
),
);
} catch (error: unknown) {
if (error instanceof ContractError) throw error;
throw new ContractError(CONFIG.CONTRACT_ERROR_CODES.PARSE_ERROR, {
name,
error: (error as Error).message,
});
}
};

/**
* @notice Contract file type enum
*/
export enum ContractType {
CONTRACT = 'contracts_',
TOKEN = 'token_',
MOCK = 'mock_',
}

/**
* @notice Finds the path to a contract file based on predefined patterns
* @param name The base name of the contract to find
* @param suffix The type of contract file to look for (from CONFIG.CONTRACT_FILE_SUFFIXES)
* @param type Optional contract type prefix (defaults to CONTRACT)
* @returns {string} The full path to the contract file
* @throws {ContractError} If file is not found or the contract name is invalid
*/
function findContractFile(
name: string,
suffix: keyof typeof CONFIG.CONTRACT_FILE_SUFFIXES,
type: ContractType = ContractType.CONTRACT,
): string {
const suffixPath = CONFIG.CONTRACT_FILE_SUFFIXES[suffix];
const path = `${TARGET_DEV_PATH}/${type}${name}${suffixPath}`;

if (!existsSync(path)) {
throw new ContractError(CONFIG.CONTRACT_ERROR_CODES.FILE_NOT_FOUND, {
name,
suffix,
path,
});
}

return path;
}
15 changes: 15 additions & 0 deletions starknet/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"importHelpers": true,
"noEmitHelpers": true,
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src/**/*"],
"ts-node": {
"experimentalSpecifierResolution": "node",
"experimentalResolver": true,
"files": true
}
}
Loading