Skip to content

Commit 02b6fc3

Browse files
committed
fix: restore starknet-sdk package lost during main merge
1 parent cebf47f commit 02b6fc3

51 files changed

Lines changed: 8245 additions & 0 deletions

Some content is hidden

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

typescript/starknet-sdk/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dist
2+
cache
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"import": ["tsx"],
3+
"file": ["src/tests/e2e-test.setup.ts"],
4+
"exit": true
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"import": ["tsx"],
3+
"spec": ["./src/**/*.test.ts"],
4+
"exit": true
5+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# @hyperlane-xyz/starknet-sdk
2+
3+
## 27.2.2
4+
5+
### Patch Changes
6+
7+
- @hyperlane-xyz/starknet-core@29.1.0
8+
- @hyperlane-xyz/utils@29.1.0
9+
- @hyperlane-xyz/provider-sdk@4.2.2
10+
11+
## 27.2.1
12+
13+
### Patch Changes
14+
15+
- @hyperlane-xyz/starknet-core@29.0.1
16+
- @hyperlane-xyz/utils@29.0.1
17+
- @hyperlane-xyz/provider-sdk@4.2.1
18+
19+
## 27.2.0
20+
21+
### Minor Changes
22+
23+
- 09d6760: Added Starknet artifact API support across the TypeScript AltVM toolchain. The new `@hyperlane-xyz/starknet-sdk` package provides Starknet protocol, signer, provider, ISM, hook, mailbox, validator announce, and end-to-end test coverage. Deploy SDK protocol loading and the CLI context/signer flows were updated so Starknet chains can be resolved and used through the shared AltVM paths.
24+
25+
### Patch Changes
26+
27+
- Updated dependencies [3c6b1ad]
28+
- Updated dependencies [084c6b6]
29+
- @hyperlane-xyz/utils@29.0.0
30+
- @hyperlane-xyz/provider-sdk@4.2.0
31+
- @hyperlane-xyz/starknet-core@29.0.0
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"name": "@hyperlane-xyz/starknet-sdk",
3+
"version": "27.2.2",
4+
"description": "Hyperlane TypeScript SDK for Starknet artifact API support",
5+
"keywords": [
6+
"blockchain",
7+
"hyperlane",
8+
"sdk",
9+
"starknet"
10+
],
11+
"homepage": "https://www.hyperlane.xyz",
12+
"license": "Apache-2.0",
13+
"repository": "https://github.com/hyperlane-xyz/hyperlane-monorepo",
14+
"files": [
15+
"/dist"
16+
],
17+
"type": "module",
18+
"types": "dist/index.d.ts",
19+
"exports": {
20+
".": {
21+
"types": "./dist/index.d.ts",
22+
"default": "./dist/index.js"
23+
},
24+
"./testing": {
25+
"types": "./dist/testing/index.d.ts",
26+
"default": "./dist/testing/index.js"
27+
}
28+
},
29+
"scripts": {
30+
"build": "rm -rf ./dist && tsc",
31+
"format": "oxfmt --write ./src",
32+
"lint": "oxlint -c ../../oxlint.json",
33+
"clean": "rm -rf ./dist ./cache",
34+
"dev": "tsc --watch",
35+
"test": "mocha --config .mocharc.json",
36+
"test:e2e": "./scripts/run-e2e-test.sh",
37+
"test:ci": "pnpm test"
38+
},
39+
"dependencies": {
40+
"@hyperlane-xyz/provider-sdk": "workspace:*",
41+
"@hyperlane-xyz/starknet-core": "workspace:*",
42+
"@hyperlane-xyz/utils": "workspace:*",
43+
"starknet": "catalog:"
44+
},
45+
"devDependencies": {
46+
"@hyperlane-xyz/tsconfig": "workspace:^",
47+
"@types/chai": "catalog:",
48+
"@types/mocha": "catalog:",
49+
"@types/node": "catalog:",
50+
"chai": "catalog:",
51+
"mocha": "catalog:",
52+
"testcontainers": "catalog:",
53+
"tsx": "catalog:",
54+
"typescript": "catalog:"
55+
}
56+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
case "${STARKNET_SDK_E2E_TEST:-}" in
5+
"")
6+
spec="src/tests/*.e2e-test.ts"
7+
echo "Running all Starknet SDK E2E tests"
8+
;;
9+
ism|mailbox|hook|validator_announce|warp_core|warp_transfer|read-warp-token)
10+
spec="src/tests/${STARKNET_SDK_E2E_TEST}.e2e-test.ts"
11+
;;
12+
*)
13+
echo "Error: unknown STARKNET_SDK_E2E_TEST value '${STARKNET_SDK_E2E_TEST}'" >&2
14+
echo "Expected one of: ism, mailbox, hook, validator_announce, warp_core, warp_transfer, read-warp-token" >&2
15+
exit 1
16+
;;
17+
esac
18+
19+
if [ -n "${STARKNET_SDK_E2E_TEST:-}" ]; then
20+
echo "Running Starknet SDK E2E shard: ${STARKNET_SDK_E2E_TEST}"
21+
fi
22+
23+
pnpm mocha --config .mocharc-e2e.json "${spec}"
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { expect } from 'chai';
2+
3+
import { ProtocolType } from '@hyperlane-xyz/provider-sdk';
4+
5+
import { StarknetWarpArtifactManager } from '../warp/warp-artifact-manager.js';
6+
7+
import { StarknetProtocolProvider } from './protocol.js';
8+
9+
const METADATA = {
10+
name: 'starknetsepolia',
11+
protocol: ProtocolType.Starknet,
12+
chainId: 'SN_SEPOLIA',
13+
domainId: 1234,
14+
rpcUrls: [{ http: 'http://localhost:9545' }],
15+
};
16+
17+
describe('StarknetProtocolProvider', () => {
18+
it('returns a Starknet warp artifact manager', () => {
19+
const provider = new StarknetProtocolProvider();
20+
21+
const manager = provider.createWarpArtifactManager(METADATA);
22+
23+
expect(manager).to.be.instanceOf(StarknetWarpArtifactManager);
24+
expect(manager.supportsHookUpdates()).to.equal(true);
25+
});
26+
27+
it('does not implement a protocol-level submitter', async () => {
28+
const provider = new StarknetProtocolProvider();
29+
30+
let error: unknown;
31+
try {
32+
await provider.createSubmitter(METADATA, {
33+
type: 'jsonRpc',
34+
chain: 'starknetsepolia',
35+
privateKey: '0xkey',
36+
accountAddress: '0x123',
37+
});
38+
} catch (caughtError) {
39+
error = caughtError;
40+
}
41+
42+
expect(String(error)).to.match(/Not implemented/);
43+
});
44+
});
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import {
2+
AltVM,
3+
ChainMetadataForAltVM,
4+
ITransactionSubmitter,
5+
MinimumRequiredGasByAction,
6+
ProtocolProvider,
7+
SignerConfig,
8+
TransactionSubmitterConfig,
9+
} from '@hyperlane-xyz/provider-sdk';
10+
import { IProvider } from '@hyperlane-xyz/provider-sdk/altvm';
11+
import { IRawHookArtifactManager } from '@hyperlane-xyz/provider-sdk/hook';
12+
import { IRawIsmArtifactManager } from '@hyperlane-xyz/provider-sdk/ism';
13+
import { IRawMailboxArtifactManager } from '@hyperlane-xyz/provider-sdk/mailbox';
14+
import { AnnotatedTx, TxReceipt } from '@hyperlane-xyz/provider-sdk/module';
15+
import { IRawValidatorAnnounceArtifactManager } from '@hyperlane-xyz/provider-sdk/validator-announce';
16+
import { IRawWarpArtifactManager } from '@hyperlane-xyz/provider-sdk/warp';
17+
import { assert } from '@hyperlane-xyz/utils';
18+
19+
import { StarknetHookArtifactManager } from '../hook/hook-artifact-manager.js';
20+
import { StarknetIsmArtifactManager } from '../ism/ism-artifact-manager.js';
21+
import { StarknetMailboxArtifactManager } from '../mailbox/mailbox-artifact-manager.js';
22+
import { StarknetValidatorAnnounceArtifactManager } from '../validator-announce/validator-announce-artifact-manager.js';
23+
import { StarknetWarpArtifactManager } from '../warp/warp-artifact-manager.js';
24+
25+
import { StarknetProvider } from './provider.js';
26+
import { StarknetSigner } from './signer.js';
27+
28+
export class StarknetProtocolProvider implements ProtocolProvider {
29+
async createProvider(
30+
chainMetadata: ChainMetadataForAltVM,
31+
): Promise<IProvider> {
32+
const rpcUrls = (chainMetadata.rpcUrls ?? []).map(({ http }) => http);
33+
assert(rpcUrls.length > 0, 'rpc urls undefined for Starknet');
34+
return StarknetProvider.connect(rpcUrls, chainMetadata.chainId, {
35+
metadata: chainMetadata,
36+
});
37+
}
38+
39+
async createSigner(
40+
chainMetadata: ChainMetadataForAltVM,
41+
config: SignerConfig,
42+
): Promise<AltVM.ISigner<AnnotatedTx, TxReceipt>> {
43+
const rpcUrls = (chainMetadata.rpcUrls ?? []).map(({ http }) => http);
44+
assert(rpcUrls.length > 0, 'rpc urls undefined for Starknet');
45+
assert(config.privateKey, 'privateKey missing for Starknet signer');
46+
assert(config.accountAddress, 'accountAddress missing for Starknet signer');
47+
48+
return StarknetSigner.connectWithSigner(rpcUrls, config.privateKey, {
49+
metadata: chainMetadata,
50+
accountAddress: config.accountAddress,
51+
});
52+
}
53+
54+
async createSubmitter<TConfig extends TransactionSubmitterConfig>(
55+
_chainMetadata: ChainMetadataForAltVM,
56+
_config: TConfig,
57+
): Promise<ITransactionSubmitter> {
58+
throw Error('Not implemented');
59+
}
60+
61+
createIsmArtifactManager(
62+
chainMetadata: ChainMetadataForAltVM,
63+
): IRawIsmArtifactManager {
64+
return new StarknetIsmArtifactManager(chainMetadata);
65+
}
66+
67+
createHookArtifactManager(
68+
chainMetadata: ChainMetadataForAltVM,
69+
context?: { mailbox?: string },
70+
): IRawHookArtifactManager {
71+
return new StarknetHookArtifactManager(chainMetadata, context);
72+
}
73+
74+
createWarpArtifactManager(
75+
chainMetadata: ChainMetadataForAltVM,
76+
_context?: { mailbox?: string },
77+
): IRawWarpArtifactManager {
78+
return new StarknetWarpArtifactManager(chainMetadata);
79+
}
80+
81+
createMailboxArtifactManager(
82+
chainMetadata: ChainMetadataForAltVM,
83+
): IRawMailboxArtifactManager {
84+
return new StarknetMailboxArtifactManager(chainMetadata);
85+
}
86+
87+
createValidatorAnnounceArtifactManager(
88+
chainMetadata: ChainMetadataForAltVM,
89+
): IRawValidatorAnnounceArtifactManager | null {
90+
return new StarknetValidatorAnnounceArtifactManager(chainMetadata);
91+
}
92+
93+
getMinGas(): MinimumRequiredGasByAction {
94+
return {
95+
CORE_DEPLOY_GAS: BigInt(1e9),
96+
WARP_DEPLOY_GAS: BigInt(3e8),
97+
TEST_SEND_GAS: BigInt(3e7),
98+
AVS_GAS: BigInt(3e8),
99+
ISM_DEPLOY_GAS: BigInt(5e7),
100+
};
101+
}
102+
}

0 commit comments

Comments
 (0)