# Admin CLI
Use the airnode-admin (opens new window) Admin CLI tool to interact with Airnode across blockchains. There are commands for both developers (dApp) and API providers. Developers can sponsor requester contracts and derive sponsorWallets for Airnodes. API providers can build Airnodes that serve their API data to requester contracts.
Transaction Gas Costs
Some commands will incur transaction fees. These are per call transaction gas costs and are relatively small. See the Developer Fees doc.
Almost all commands require you to provide a blockchain providerUrl
. Following
are just two examples of many possibilities. See the
Chain Providers doc for more information.
https://eth-goerli.gateway.pokt.network/v1/lb/<APP_ID>
https://sepolia.infura.io/v3/<KEY>
The CLI connects to the
AirnodeRrpV0.sol (opens new window)
or the
RequesterAuthorizerWithAirnode.sol (opens new window)
contract, which addresses are derived from the current chain. You can optionally
specify the contract addresses yourself by providing optional
airnode-rrp-address
or requester-authorizer-with-airnode
command argument
with the address of the deployed contract on your targeted chain.
Commands that require mnemonic
will make an on-chain transaction. The
application will derive the account from the mnemonic with default ethereum
derivation path m/44'/60'/0'/0/0
. You can override this by using the optional
parameter derivation-path
(m/44'/60'/0'/0/...
). Make sure that the wallet
that is associated with the mnemonic is funded on the target chain. The
application will not exit until the transaction is confirmed.
# Using transaction overrides
CLI commands also support the following transaction overrides as optional
arguments: gas-limit
, gas-price
(legacy transactions), max-fee
and
max-priority-fee
(EIP-1559 transactions) and nonce
.
# Default transaction overrides
If no overrides are provided, transactions will default to the following values:
EIP-1559 transactions
maxPriorityFeePerGas: 3.12 gwei
maxFeePerGas: baseFeePerGas of the last block * 2 + maxPriorityFeePerGas
2
Legacy transactions
gasPrice: gasPrice returned by the ethers getGasPrice method
# Using npx
View all commands:
npx @api3/airnode-admin --help
View the parameters of a command:
npx @api3/airnode-admin $COMMAND --help
# Using Docker
Use the Admin CLI docker image as an alternative to npx
:
docker run api3/airnode-admin:0.9.2 --help
View the parameters of a command:
docker run api3/airnode-admin:0.9.2 $COMMAND --help
# SDK
You can also use the package programmatically. The SDK exports respective functions for all CLI commands as well as helper functions for obtaining the contract instance on the targeted chain.
import { sponsorRequester, getAirnodeRrpWithSigner } from '@api3/airnode-admin';
// First obtain the contract instance on target chain
const airnodeRrp = await getAirnodeRrpWithSigner(
mnemonic,
derivation - path,
providerUrl,
airnodeRrpAddress
);
// Pass the contract instance as the first argument to the SDK function
const requester = await sponsorRequester(airnodeRrp, requester);
2
3
4
5
6
7
8
9
10
11
If you plan to use multiple commands it might be tedious to pass the contract
instance to every function call. For this reason there is also class based
AdminSdk
which you initialize with AirnodeRrp
contract only once.
import { AdminSdk } from '@api3/airnode-admin';
// First initialize the SDK with AirnodeRrpV0 contract instance.
// You can use static AdminSdk functions or provide your own instance.
const airnodeRrp = await AdminSdk.getAirnodeRrpWithSigner(
mnemonic,
derivation - path,
providerUrl,
airnodeRrpAddress
);
// Create sdk instance
const adminSdk = new AdminSdk(airnodeRrp);
// Call the method you need
const requester = await adminSdk.sponsorRequester(requester);
// You can switch the contract instance anytime. E.g. if you are using ethers
adminSdk.airnodeRrp = airnodeRrp.connect(someOtherWallet);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
The SDK will also provide TS typings out of the box. Please, refer to the implementation for more details.
# Using transaction overrides
You can also use transaction overrides to customize gas limits and fee settings. The SDK simply passes the overrides parameter to the contract method so you can use any overrides supported by the ethers library.
import { ethers } from 'ethers';
// Legacy transaction overrides
const overrides = {
gasLimit: ethers.BigNumber.from('200000'),
gasPrice: ethers.utils.parseUnits('20', 'gwei')
};
// EIP-1559 transaction overrides
const overrides = {
gasLimit: ethers.BigNumber.from('200000'),
maxFeePerGas: ethers.utils.parseUnits('20', 'gwei')
maxPriorityFeePerGas: ethers.utils.parseUnits('10', 'gwei')
};
// The transaction overrides parameter is optional and can be passed in as the last parameter
const requester = await adminSdk.sponsorRequester(requester, overrides);
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Sponsors
Commands related to a sponsor's relationships between requesters and sponsorWallets as well as templates used by a sponsor's requesters. Some of these commands connect to the AirnodeRrpV0.sol (opens new window) protocol contract where the signer is sponsor account.
- sponsor-requester
- unsponsor-requester
- get-sponsor-status
- derive-sponsor-wallet-address
- create-template
- create-inline-template
- get-template
- request-withdrawal
- check-withdrawal-request
- verify-airnode-xpub
# sponsor-requester
Sponsors a requester
contract so that its requests can be fulfilled by the
sponsorWallet of an Airnode. The
account derived from the mnemonic
you provide must belong to the sponsor.
Sponsoring a requester and using the returned sponsorAddress
to derive a
sponsorWallet
for an Airnode creates a
relationship between the requester and the Airnode,
see the
derive-sponsor-wallet-address
command.
provider-url
: A valid blockchain provider URL.sponsor-mnemonic
: A wallet owned by the sponsor. Used to derive asponsorAddress
as the default account of the mnemonic unless aderivation-path
is specified. It's also used to pay gas costs from the mnemonic's default account unless aderivation-path
is specified.requester-address
: The contract address of the requester to sponsor.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract. If this parameter is not provided, it will be deduced from the current chain. If there is no RRP address found for the given chain an error is thrown.derivation-path (optional)
: Selects an alternate account to use from the mnemonic rather than the default.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# unsponsor-requester
Removes the sponsorship of a requester contract
so that its requests can no longer be fulfilled by the
sponsorWallet. The account derived
from the mnemonic
you provide here has to belong to the sponsor.
provider-url
: A valid blockchain provider URL.sponsor-mnemonic
: A wallet owned by the sponsor. Must be the mnemonic used to sponsor the requester. Used to pay gas costs from the mnemonic's default account unless aderivation-path
is specified.requester-address
: The contract address of the requester to unsponsor.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract.derivation-path (optional)
: Selects an alternate account to use from the mnemonic rather than the default.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# get-sponsor-status
Returns the sponsor status for a given sponsor and
requester (true
if sponsored, false
otherwise).
provider-url
: A valid blockchain provider URL.sponsor-address
: ThesponsorAddress
returned when the requester was sponsored.requester-address
: The requester contract address.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract.
# derive-sponsor-wallet-address
Derives the address of the wallet designated by an Airnode for a
sponsor, which is called the
sponsorWallet. This command will
error if airnode-xpub
does not belong to the HDNode with the path
m/44'/60'/0'
of the Airnode wallet. See the
derive-airnode-xpub
command.
airnode-xpub
: The extended public address of the Airnode for pathm/44'/60'/0'
.airnode-address
: The public address of the Airnode.sponsor-address
: The address of the sponsor account.
# create-template
Reads a file, uses its contents to create a
template and returns a template-id
. Also see
Using Templates for an example
template file.
provider-url
: A valid blockchain provider URL.mnemonic
: Used to pay gas costs from the mnemonic's default account unless aderivation-path
is specified.template-file-path
: Path to the template file to create on-chain.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract.derivation-path (optional)
: Selects an alternate account to use from the mnemonic rather than the default.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# create-inline-template
It is possible to inline Airnode templates inside config.json in a templates
section. These templates need to be published on chain, but inlining them inside
config provides more clarity which templates can be used for template requests
and also saves a blockchain call .
The command reads a template file, uses its contents to create a template and returns the data necessary to inline the template inside config. See Using Templates for an example template file.
This command does not create a template on chain. Be sure to use the create-template command on chain before making template requests.
template-file-path
: Path to the template file to create on-chain.
# get-template
Returns the template for the given template-id
.
provider-url
: A valid blockchain provider URL.template-id
: The id of a template to return.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract.
# request-withdrawal
Requests a withdrawal from a sponsorWallet managed by an Airnode.
The funds will be returned to the account derived from the sponsor-mnemonic
.
This account must belong to a sponsor for the
specified sponsor wallet address in
the command.
After the request is made, it needs to be fulfilled by Airnode, so the return
value of this command is only a withdrawal-request-id
which you can use to
call check-withdrawal-request to see
whether the request was processed or not.
Withdrawal Priority
Airnode will drop any pending API calls associated with a sponsorWallet
once a
withdrawal is requested.
provider-url
: A valid blockchain provider URL.sponsor-mnemonic
: A wallet owned by the sponsor. Used to pay gas costs from the mnemonic's default account unless aderivation-path
is specified. Withdrawn funds will be added to this mnemonic's default address unless aderivation-path
is specified.airnode-address
: The public address of the Airnode.sponsor-wallet-address
: The pubic address of the sponsorWallet to withdraw from. This address was returned by thederive-sponsor-wallet-address
command.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract.derivation-path (optional)
: The destination address of themnemonic
parameter to add the withdrawn funds to if the default address is not desired.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# check-withdrawal-request
Checks the status of the withdrawal
request with the given withdrawal-request-id
from the
request withdrawal command above.
provider-url
: A valid blockchain provider URL.withdrawal-request-id
: This id was returned by therequest-withdrawal
command.airnode-rrp-address (optional)
: The public address of the AirnodeRrpV0.sol protocol contract.
# verify-airnode-xpub
Verifies that the airnode-xpub
belongs to the HDNode with the path
m/44'/60'/0'
of the Airnode wallet. This command checks that the Airnode
address can be derived with provided Airnode
xpub with default derivation path
m/44'/60'/0'/0/0
and compares it with the airnode-address
. This command will
most likely be used by a sponsor to verify that the
xpub belongs to the Airnode before calling the
derive-sponsor-wallet-address
command.
# Airnodes
Helper commands for a previously deployed Airnode. Some of these commands connect to the AirnodeRrpV0.sol protocol contract where the signer must be the Airnode wallet.
# derive-airnode-xpub
Derives the Airnode extended public key (xpub). This xpub must be announced via off-chain channels because it will be needed to derive a sponsorWallet address. See the derive-sponsor-wallet-address command.
airnode-mnemonic
: The Airnode mnemonic for which the xpub is to be derived.
# derive-endpoint-id
Derives an endpointId from the
OIS title and the endpoint's name. This command uses the convention described in
the
triggers
section of the configuring airnode documentation. Add the endpointId
to the
config.json file (triggers.rrp[n].endpointId
).
ois-title
: The title of the OIS from config.json (ois.title
).endpoint-name
: The name of the endpoint from config.json (triggers.rrp[n].endpointName
).
# generate-airnode-mnemonic
Generates a unique mnemonic which can be used to create an airnode wallet. In addition to the mnemonic, this command will also display the corresponding airnode address and its extended public key (xpub).
npx @api3/airnode-admin generate-airnode-mnemonic
# generate-mnemonic
Generates a unique mnemonic which can be used to create a wallet. In addition to the mnemonic, this command will also display the corresponding default wallet (path:m/44'/60'/0'/0/0) address.
npx @api3/airnode-admin generate-mnemonic
# derive-airnode-address
Derives the airnode address which is the identifier of the particular Airnode on chain. The address is the default address of a BIP 44 wallet (with the path m/44'/60'/0'/0/0). Use this identifier for many other admin CLI commands, such as derive-sponsor-wallet-address.
airnode-mnemonic
: A mnemonic used to generate the airnode address.
# RequesterAuthorizerWithAirnode
RequesterAuthorizerWithAirnode contract was written by API3 as an authorizer contract that can be used by any Airnode. Airnode owners can use this contract in addition to authorizer contracts they have written themselves.
This authorizer contract can whitelist requesters where each Airnode is adminned by themselves.
These commands connect to the RequesterAuthorizerWithAirnode.sol (opens new window) contract.
- set-whitelist-expiration
- extend-whitelist-expiration
- set-indefinite-whitelist-status
- get-whitelist-status
- is-requester-whitelisted
# set-whitelist-expiration
Called by the Airnode wallet or a whitelist expiration setter to set the whitelisting expiration of a requester for the Airnode–endpoint pair. This can hasten expiration in the case the new expiration timestamp is prior to a previously set timestamp.
mnemonic
: Used to pay gas costs from the mnemonic's default account unless aderivation-path
is specified. The mnemonic must be at least an Admin or Airnode wallet.provider-url
: A valid blockchain provider URL.endpoint-id
: TheendpointId
for which permission is granted (from OIS).requester-address
: The public address of the requester contract.expiration-timestamp
: A unix formatted timestamp.airnode-address
: The public address of the Airnode.requester-authorizer-with-airnode (optional)
: The authorizer contract address.derivation-path (optional)
: Selects an alternate account to use from the mnemonic rather than the default.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# extend-whitelist-expiration
Called by the Airnode wallet or a whitelist expiration extender to extend the whitelist expiration of a requester for the Airnode–endpoint pair. This command expects that the new expiration timestamp is later then the previously set timestamp.
mnemonic
: Used to pay on-chain gas cost for this command's transaction. The mnemonic must be at least an Admin or Airnode wallet.provider-url
: A valid blockchain provider URL.endpoint-id
: TheendpointId
for which permission is granted (from OIS).requester-address
: The public address of the requester contract.expiration-timestamp
: A unix formatted timestamp.airnode-address
: The public address of the Airnode.requester-authorizer-with-airnode (optional)
: The authorizer contract address.derivation-path (optional)
: Selects an alternate account to use from the mnemonic rather than the default.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# set-indefinite-whitelist-status
Called by the Airnode wallet or an indefinite whitelister to whitelist a requester indefinitely for the Airnode–endpoint pair. This command can be used to make whitelisting permanent in cases where it is needed to allow requests even beyond the expiration period.
mnemonic
: Used to pay on-chain gas cost for this command's transaction. The mnemonic must be at least an Admin or Airnode wallet. The default address of the mnemonic will be used unless a derivation-path is provided.provider-url
: A valid blockchain provider URL.endpoint-id
: TheendpointId
for which permission is granted (from OIS).requester-address
: The public address of the requester contract.expiration-timestamp
: A unix formatted timestamp.airnode-address
: The public address of the Airnode.requester-authorizer-with-airnode (optional)
: The authorizer contract address.derivation-path (optional)
: Selects an alternate account to use from the mnemonic rather than the default.indefinite-whitelist-status
: Whether the Airnode-endpoint pair should be whitelisted indefinitely or not.gas-limit
(optional): The gas limit to use for the transaction.gas-price
(optional): The gas price (in gwei) to use for the transaction (only for legacy transactions).max-fee
(optional): The maximum fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).max-priority-fee
(optional): The maximum priority fee (in gwei) per gas to use for the transaction (only for EIP-1559 transactions).nonce
(optional): The nonce to use for the transaction.
# get-whitelist-status
Called to get the detailed whitelist status of a requester for the Airnode–endpoint pair.
provider-url
: A valid blockchain provider URL.endpoint-id
: TheendpointId
for which permission is granted (from OIS).requester-address
: The public address of the requester contract.airnode-address
: The public address of the Airnode.requester-authorizer-with-airnode (optional)
: The authorizer contract address.
# is-requester-whitelisted
Called to check if a requester is whitelisted to use the Airnode–endpoint pair.
provider-url
: A valid blockchain provider URL.requester-authorizer-with-airnode
: The authorizer contract address.endpoint-id
: TheendpointId
for which permission is granted (from OIS).requester-address
: The public address of the requester contract.airnode-address
: The public address of the Airnode.
# More Examples
You can find more examples in the api3dao/airnode/packages/airnode-admin test directory (opens new window).