Fund a Local Test Network
Introduction
In Create a Local Test Network, we showed you how to launch a 5 node local test network. Once you have a local network the next step is to fund an address so that you can begin creating transactions and interacting with smart-contracts.
We'll show you how to leverage a pre-funded private key to access funds on the X-Chain, C-Chain and P-Chain.
PrivateKey-ewoqjP7PxY4yr3iLTpLisriqt94hdyDFNgchSxGGztUrTXtNN
, can be used to
sign transactions locally using MetalJS.
You don't need to import the key into the local keystore in order to access
those funds. They are in the genesis vertex and block for each respective chain.
The port in this tutorial uses 9650. Depending on how you start your local network, it could be different. If you are using Metal Network Runner, please check here to see how to retrieve the port numbers.
API](/apis/metalgo/apis/keystore), because the node operator has access to your plain-text password, you should only create a keystore user on a node that you operate. If that node is breached, you could lose all your tokens. Keystore APIs are not recommended for use on Mainnet. :::
Create a User
This step can be skipped if you are only interesting in how to check the fund balance on X/P/C Chain. :::
First run
keystore.createUser
to create a user in the local keystore.
curl --location --request POST '127.0.0.1:9650/ext/keystore' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" :1,
"method" :"keystore.createUser",
"params" :{
"username": "username",
"password": "password"
}
}'
{
"jsonrpc": "2.0",
"result": {
"success": true
},
"id": 1
}
Next you can import the pre-funded private key,
PrivateKey-ewoqjP7PxY4yr3iLTpLisriqt94hdyDFNgchSxGGztUrTXtNN
, aka ewoq
, into
any of the 3 blockchains on the default Subnet. After importing the key you can
check the balance to confirm that it worked.
X-Chain
Import Key
ßThis step can be skipped if you are only interesting in how to check the fund balance on X Chain. It shows how to get the correct address.
Import ewoq
into the X-Chain via avm.importKey API.
curl --location --request POST '127.0.0.1:9650/ext/bc/X' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" :1,
"method" :"avm.importKey",
"params" :{
"username": "username",
"password": "password",
"privateKey":"PrivateKey-ewoqjP7PxY4yr3iLTpLisriqt94hdyDFNgchSxGGztUrTXtNN"
}
}'
{
"jsonrpc": "2.0",
"result": {
"address": "X-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p"
},
"id": 1
}
Check X-Chain Balance
Confirm the X-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p
address now has a
balance of 300m METAL on the X-Chain.
curl --location --request POST '127.0.0.1:9650/ext/bc/X' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" : 1,
"method" :"avm.getBalance",
"params" :{
"address":"X-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p",
"assetID": "METAL"
}
} '
{
"jsonrpc": "2.0",
"result": {
"balance": "300000000000000000",
"utxoIDs": [
{
"txID": "BUuypiq2wyuLMvyhzFXcPyxPMCgSp7eeDohhQRqTChoBjKziC",
"outputIndex": 1
}
]
},
"id": 1
}
C-Chain
Import Key
This step can be skipped if you are only interesting in how to check the fund balance on C Chain. It just shows how to get the correct address.
Import ewoq
into the C-Chain via metal.importKey
API.
curl --location --request POST '127.0.0.1:9650/ext/bc/C/avax' \
--header 'Content-Type: application/json' \
--data-raw '{
"method": "avax.importKey",
"params": {
"username":"username",
"password":"password",
"privateKey":"PrivateKey-ewoqjP7PxY4yr3iLTpLisriqt94hdyDFNgchSxGGztUrTXtNN"
},
"jsonrpc": "2.0",
"id": 1
}'
{
"jsonrpc": "2.0",
"result": {
"address": "0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC"
},
"id": 1
}
Check the C-Chain Balance
Confirm the 0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC
address has a balance
of 50m (0x295be96e64066972000000 in hex) METAL on the C-Chain.
curl --location --request POST 'localhost:9650/ext/bc/C/rpc' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": [
"0x8db97C7cEcE249c2b98bDC0226Cc4C2A57BF52FC",
"latest"
],
"id": 1
}'
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x295be96e64066972000000"
}
Integrate with MetaMask
To see this account on MetaMask, follow these steps:
Set up MetaMask by using the info below:
- Network Name: Metal Local C-Chain
- New RPC URL: http://127.0.0.1:9650/ext/bc/C/rpc
- ChainID:
381930
- Symbol:
METAL
Create a new account by importing this private key
0x56289e99c94b6912bfc12adc093c9b51124f0dc54ac7a766b2bc5ccf558d8027
on MetaMask
- Now you can see the balance of this newly created account on
Metal Local
P-Chain
Import Key
fund balance on P Chain. It just shows how to get the correct address. :::
Import ewoq
into the P-Chain via platform.importKey API.
curl --location --request POST '127.0.0.1:9650/ext/bc/P' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" :1,
"method" :"platform.importKey",
"params" :{
"username":"username",
"password":"password",
"privateKey":"PrivateKey-ewoqjP7PxY4yr3iLTpLisriqt94hdyDFNgchSxGGztUrTXtNN"
}
}'
{
"jsonrpc": "2.0",
"result": {
"address": "P-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p"
},
"id": 1
}
Check P-Chain Balance
Confirm the P-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p
address has a
balance of 30m METAL on the P-Chain. 20m should be unlocked and 10m locked and
stakeable.
curl --location --request POST '127.0.0.1:9650/ext/bc/P' \
--header 'Content-Type: application/json' \
--data-raw '{
"jsonrpc":"2.0",
"id" :1,
"method" :"platform.getBalance",
"params" :{
"address":"P-custom18jma8ppw3nhx5r4ap8clazz0dps7rv5u9xde7p"
}
}'
{
"jsonrpc": "2.0",
"result": {
"balance": "30000000000000000",
"unlocked": "30000000000000000",
"lockedStakeable": "0",
"lockedNotStakeable": "0",
"utxoIDs": [
{
"txID": "11111111111111111111111111111111LpoYY",
"outputIndex": 0
},
{
"txID": "11111111111111111111111111111111LpoYY",
"outputIndex": 1
}
]
},
"id": 1
}