-
Notifications
You must be signed in to change notification settings - Fork 62
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
28 changed files
with
1,358 additions
and
11 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
85 changes: 85 additions & 0 deletions
85
website/versioned_docs/version-0.2.0/account-impersonation.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
# Account impersonation | ||
|
||
:::info | ||
|
||
This page is about account impersonation. To read about account class selection and deployment, click [here](./predeployed). | ||
|
||
::: | ||
|
||
## Introduction | ||
|
||
Devnet allows you to use impersonated account from mainnet/testnet. This means that a transaction sent from an impersonated account will not fail with an invalid signature error. In the general case, a transaction sent with an account that is not in the local state fails with the aforementioned error. For impersonation to work, Devnet needs to be run in [forking mode](./forking.md). | ||
|
||
:::warning Caveat | ||
|
||
- Only `INVOKE` and `DECLARE` transactions are supported. `DEPLOY_ACCOUNT` transaction is not supported, but you can create an `INVOKE` transaction to UDC. | ||
- Overall fee, for transactions sent with an impersonated account, will be lower compared to normal transactions. The reason is that validation part is skipped. | ||
- The most common way of sending a transaction is via starknet-rs/starknet.js or starkli. Trying to send with an account that **does not** exist even in the origin network will return an error: | ||
- In transaction construction, if account nonce is not hardcoded, Devnet is queried and returns `ContractNotFound`. | ||
- Otherwise the nonce fetching part is skipped and `InsufficientAccountBalance` is returned. | ||
|
||
::: | ||
|
||
## Disabling impersonation | ||
|
||
Click [here](./restrictive.md) to learn how to disable account impersonation. | ||
|
||
## API | ||
|
||
Account impersonation follows JSON-RPC method specification. Each method returns an empty response: | ||
|
||
### devnet_impersonateAccount | ||
|
||
Impersonates a specific account address nonexistent in the local state. | ||
|
||
```js | ||
{ | ||
"jsonrpc": "2.0", | ||
"id": "1", | ||
"method": "devnet_impersonateAccount", | ||
"params": { | ||
"account_address": "0x49D36570D4E46F48E99674BD3FCC84644DDD6B96F7C741B1562B82F9E004DC7" | ||
} | ||
} | ||
``` | ||
|
||
### devnet_stopImpersonateAccount | ||
|
||
Stops the impersonation of an account previously marked for impersonation. | ||
|
||
```js | ||
{ | ||
"jsonrpc": "2.0", | ||
"id": "1", | ||
"method": "devnet_stopImpersonateAccount", | ||
"params": { | ||
"account_address": "0x49D36570D4E46F48E99674BD3FCC84644DDD6B96F7C741B1562B82F9E004DC7" | ||
} | ||
} | ||
``` | ||
|
||
### devnet_autoImpersonate | ||
|
||
Enables automatic account impersonation. Every account that does not exist in the local state will be impersonated. | ||
|
||
```js | ||
{ | ||
"jsonrpc": "2.0", | ||
"id": "1", | ||
"method": "devnet_autoImpersonate", | ||
"params": {} | ||
} | ||
``` | ||
|
||
### devnet_stopAutoImpersonate | ||
|
||
Stops the effect of [automatic impersonation](#devnet_autoimpersonate). | ||
|
||
```js | ||
{ | ||
"jsonrpc": "2.0", | ||
"id": "1", | ||
"method": "devnet_stopAutoImpersonate", | ||
"params": {} | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
--- | ||
sidebar_position: 3 | ||
--- | ||
|
||
# API | ||
|
||
## JSON-RPC API | ||
|
||
Both Starknet's and Devnet's JSON-RPC API are reachable at `/rpc` and `/`. E.g. if spawning Devnet with default settings, these URLs are functionally equivalent: `http://127.0.0.1:5050/rpc` and `http://127.0.0.1:5050/`. The difference between these two groups of methods is their prefix: `starknet_` (e.g. `starknet_getNonce`) and `devnet_` (e.g. `devnet_mint`). | ||
|
||
### Starknet API | ||
|
||
Unlike Pythonic Devnet, which also supported Starknet's gateway and feeder gateway API, Devnet in Rust supports [Starknet's JSON-RPC API](https://github.com/starkware-libs/starknet-specs/tree/master/api). Since JSON-RPC v0.6.0, to find out which JSON-RPC version is supported by which Devnet version, check out the [releases page](https://github.com/0xspaceshard/starknet-devnet-rs/releases). | ||
|
||
### Devnet API | ||
|
||
Devnet has many additional features which are available via their own endpoints and JSON-RPC. The RPC methods are documented throughout the documentation in their corresponding pages, but are also aggregated [here](https://github.com/0xSpaceShard/starknet-devnet-rs/website/static/devnet_api.json). | ||
|
||
:::warning Deprecation notice | ||
|
||
New features are only supported as part of the JSON-RPC API. Older non-RPC requests are still supported, but considered deprecated - they will be removed in the future, except the [healthcheck endpoint](#healthcheck). | ||
|
||
::: | ||
|
||
#### Healthcheck | ||
|
||
To check if a Devnet instance is alive, send an HTTP request `GET /is_alive`. If alive, the Devnet will reply with a `200 OK` and an appropriate message. | ||
|
||
## Interacting with Devnet in JavaScript and TypeScript | ||
|
||
To spawn Devnet and interact with it using the [Devnet API](#devnet-api), you can use [`starknet-devnet-js`](https://github.com/0xSpaceShard/starknet-devnet-js/). This can be especially useful in achieving [L1-L2 communication](./postman.md#l1-l2-interaction-via-postman). | ||
|
||
To interact with Devnet using the [Starknet API](#starknet-api), use [starknet.js](https://www.starknetjs.com/). | ||
|
||
## Config API | ||
|
||
To retrieve the current configuration of Devnet, as specified via [CLI](running/cli.md) and later requests, send a `GET` request to `/config` or `JSON-RPC` request with method name `devnet_getConfig`. Example response is attached below. It can be interpreted as a JSON mapping of CLI input parameters, both specified and default ones, with some irrelevant parameters omitted. So use `starknet-devnet --help` to better understand the meaning of each value, though keep in mind that some of the parameters have slightly modified names. | ||
|
||
```json | ||
{ | ||
"seed": 4063802897, | ||
"total_accounts": 10, | ||
"account_contract_class_hash": "0x61dac032f228abef9c6626f995015233097ae253a7f72d68552db02f2971b8f", | ||
"predeployed_accounts_initial_balance": "1000000000000000000000", | ||
"start_time": null, | ||
"gas_price_wei": 100000000000, | ||
"gas_price_fri": 100000000000, | ||
"data_gas_price_wei": 100000000000, | ||
"data_gas_price_fri": 100000000000, | ||
"chain_id": "SN_SEPOLIA", | ||
"dump_on": "exit", | ||
"dump_path": "dump_path.json", | ||
"state_archive": "none", | ||
"fork_config": { | ||
"url": "http://rpc.pathfinder.equilibrium.co/integration-sepolia/rpc/v0_7", | ||
"block_number": 26429 | ||
}, | ||
"server_config": { | ||
"host": "127.0.0.1", | ||
"port": 5050, | ||
"timeout": 120, | ||
"request_body_size_limit": 2000000, | ||
"restricted_methods": null | ||
}, | ||
"block_generation": null, | ||
"lite_mode": false, | ||
"eth_erc20_class_hash": "0x046ded64ae2dead6448e247234bab192a9c483644395b66f2155f2614e5804b0", | ||
"strk_erc20_class_hash": "0x046ded64ae2dead6448e247234bab192a9c483644395b66f2155f2614e5804b0" | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
# Account balance | ||
|
||
Other than using prefunded predeployed accounts, you can also add funds to an account that you deployed yourself. | ||
|
||
Separate tokens use separate ERC20 contracts for minting and charging fees. These are the token contracts predeployed by Devnet and the addresses where they are located: | ||
|
||
- ETH: `0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7` | ||
- STRK: `0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d` | ||
|
||
## Mint token - Local faucet | ||
|
||
By sending a `POST` request to `/mint` or `JSON-RPC` request with method name `devnet_mint` for a token, you initiate a transaction on that token's ERC20 contract. The response contains the hash of this transaction, as well as the new balance after minting. The token is specified by providing the unit, and defaults to `WEI`. | ||
|
||
The value of `amount` is in WEI or FRI. The precision is preserved if specifying an integer or a float whose fractional part is zero (e.g. `1000.0`, `1e21`). If the fractional part is non-zero, the amount is truncated to the nearest integer (e.g. `3.9` becomes `3` and `1.23e1` becomes `12`). | ||
|
||
``` | ||
POST /mint | ||
{ | ||
"address": "0x6e3205f...", | ||
"amount": 500000, | ||
"unit": "WEI" | "FRI" | ||
} | ||
``` | ||
|
||
``` | ||
JSON-RPC | ||
{ | ||
"jsonrpc": "2.0", | ||
"id": "1", | ||
"method": "devnet_mint", | ||
"params": { | ||
"address": "0x6e3205f...", | ||
"amount": 500000, | ||
"unit": "WEI" | "FRI" | ||
} | ||
} | ||
``` | ||
|
||
Response: | ||
|
||
``` | ||
{ | ||
"new_balance": 500000, | ||
"unit": "WEI" | "FRI", | ||
"tx_hash": "0xa24f23..." | ||
} | ||
``` | ||
|
||
## Check balance | ||
|
||
Check the balance of an address by sending a `GET` request to `/account_balance`. The address should be a 0x-prefixed hex string; `unit` defaults to `WEI` and `block_tag` to `latest`. | ||
|
||
``` | ||
GET /account_balance?address=<ADDRESS>[&unit=<FRI|WEI>][&block_tag=<latest|pending>] | ||
``` | ||
|
||
``` | ||
JSON-RPC | ||
{ | ||
"jsonrpc": "2.0", | ||
"id": "1", | ||
"method": "devnet_getAccountBalance", | ||
"params": { | ||
"address": "0x6e3205f...", | ||
"unit": "WEI" | "FRI", | ||
"block_tag": "latest" | "pending" | ||
} | ||
} | ||
``` |
Oops, something went wrong.