1. Generate a dedicated wallet
Use a dedicated maker wallet. Do not grant from a treasury or omnibus wallet. Injective uses Ethereum-compatiblesecp256k1 keys. The same private key has both an EVM 0x... address and an Injective inj1... bech32 address.
2. Get whitelisted
Send your makerinj1... address to the TrueCurrent team with the markets you plan to support. The contract admin calls register_maker for that address.
After registration, verify that your address appears in list_makers. The maker record may also specify a subaccount_nonce. If it is null, use nonce 0. If it is nonzero, quote and fund that exact subaccount nonce.
See Maker whitelist for the verification queries.
3. Grant authz permissions
The RFQ contract settles accepted quotes on your behalf. It can only use the message types you grant, and only as the configured grantee contract. For makers, the working grant set is:MsgWithdraw appears in some contract notes as a canonical grant, but the current working setup intentionally omits it. The active settlement path does not exercise it, and granting unused permissions increases attack surface.4. Fund the registered subaccount
Keep enough USDC in the maker exchange subaccount to back accepted quotes. Settlement uses the maker subaccount nonce recorded inlist_makers.
Also keep enough INJ for setup transactions and operational account actions.
5. Configure the maker process
At minimum, your process needs:injective-rfq-toolkit environment config rather than hardcoding.
For the full testnet reference, see Testnet configuration.
6. Run the E2E flow
Before mainnet, prove the full ceremony on testnet:- Wallet derives to the expected
inj1.... - Maker appears in
list_makers. - Maker and taker authz grants exist.
- Maker and taker balances are sufficient.
- MakerStream connects and answers
MakerChallenge. - Maker receives an RFQ request.
- Maker signs and sends a quote with
sign_mode: "v2"andevm_chain_id. - Taker collects the quote and submits
AcceptQuote. - Settlement creates the expected derivative positions.

