The four directories contain the following:
starknet/
: lists of eligibles (identified by their Starknet address) with allocations and Merkle paths, for the categories:- Starknet users
- Early community members (ECMP recipients)
eth/
: lists of eligibles (identified by their Ethereum address) with allocations and Merkle paths, for the categories:- Ethereum stakers
- Protocol core guild
- dYdX users
- ImmutableX users
github/
: lists of eligibles (identified by their GitHub username) and allocations for the categories:- Starknet developers
- EIP authors
- Ethereum developers
- General developers
stark_key/
: lists of eligibles (identified by their STARK public key) with allocations and Merkle paths, for the categories:- Sorare users
- rhino.fi users
After the Provisions announcement on February 14th 2024, a total of 1796 GitHub eligible handles that were free at the time of the announcement have been squatted since. Those usernames will not be able to claim Provisions. The username list is in github_squatted_usernames.csv
.
To claim your allocation outside the web portal your Ethereum address must be among the list of eligibles in the directory eth/
. To claim, follow these steps:
- Download a Starknet wallet (Argent or Braavos) and initialize it. At this point you should have a valid Starknet address (a 252-bit number encoded as an hex string).
- Find the Merkle path and the Merkle index corresponding to your identity, from the lists in the directory
eth/
.
The next step is sending an Ethereum transaction to Starknet’s core contract on mainnet (at address 0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4
), calling the function sendMessageToL2
(https://etherscan.io/address/0xc662c410c0ecf747543f5ba90660f6abebd9c8c4#writeProxyContract#F6).
The function sendMessageToL2
needs to be called with appropriate msg.value
(i.e. transferred ETH) and with the appropriate calldata. In the above Etherscan link, the first parameter is the payable amount (i.e. the msg.value
) and the other 3 parameters are the inputs to the function sendMessageToL2
.
The latter three parameters are as follows:
-
toAddress:
0x026942155437167f8a18c2602637e30d636f0ce7a88d5ed465f8d1f08f1ea015
-
selector:
0x00828430c65c40cba334d4723a4c5c02a62f612d73d564a1c7dc146f1d0053f9
-
payload: [
eth_address
,balance
,0
,index
,len_merkle_path
,merkle_path
,starknet_address
], where-
eth_address
: your eth address. -
balance
: the amount allocated to you, measured in fri units (1 STRK =$10^{18}$ fri). -
merkle_index
: See Step 2 at the beginning. -
len_merkle_path
: length of the array merkle_path. -
merkle_path
: See Step 2 at the beginning. -
starknet_address
: the address that you obtained in Step 1 at the beginning.
-
The transaction must have a correct payable amount: the invoked function costs roughly 3000 gas, so you should set msg.value
around 3000*gas_price
.
Here is an example using Etherscan's interface:
Note that the large integers in the calldata need to be passed as strings in Etherscan. The above is a correctly filled tx corresponding to:
- eth address =
0x1234567890123456789012345678901234567890
. - allocation amount of
800
STRK. - Merkle index =
17
. - Merkle path = [
0x4321
,0x1234
]. - Starknet recipient address =
0x1010101010101010101010101010101010101010101010101010101010101010
.
You’re in this category if your Starknet address is among the list of eligibles in the directory starknet/
.
To claim your allocation outside the web portal:
- Find the Merkle path and the Merkle index corresponding to your identity, from the lists in the directory
starknet/
. - Send a tx to the Starknet provisions contract (at address
0x06793d9e6ed7182978454c79270e5b14d2655204ba6565ce9b0aa8a3c3121025
), invoking the functionclaim
with inputs:identity
: feltamount
: u256index
: u128merkle_path
: span of felts
The easiest way to do this is as follows: go to the Starknet provision's contract on one of Starknet's block explorers and find the claim
function of the contract. Here is a link to the contract's functions on Starkscan: once you click on the function claim
you will see the following:
First, connect your wallet by clicking the blue button "Connect to Wallet" in the upper left (you can use any wallet address of your choosing).
Then fill in the blank - indicated by the red arrow in the above image - with the following data, separated by commas:
your eligible Starknet address, your STRK allocation in fri units, 0, merkle_index, length of merkle_path, 1st felt of merkle_path, ... , N-th felt of merkle_path
For example, if
- your eligible Starknet address is
0x1010101010101010101010101010101010101010101010101010101010101010
, - with allocation of
200
STRK (which equals$200*10^{18}$ fri), - Merkle index =
9
, - Merkle path = [
0x1234
,0x4321
],
then the blank will be filled with
0x1010101010101010101010101010101010101010101010101010101010101010
, 200000000000000000000
, 0
, 9
, 2
, 0x1234
, 0x4321
.
To send the transaction, click the button "Write". You will be prompted by your wallet to allow the transaction.