Skip to main content
Returns the master wallet for an owner. Every owner has exactly one deterministic master wallet, derived from their address.
GET /wallet/:owner/master

Path Parameters

ParameterTypeDescription
ownerstringOwner wallet address

Response (200)

Returns a single wallet object with the same shape as items in the List Wallets response.
FieldTypeDescription
ownerAddressstringOwner EOA address
walletAddressstringMaster wallet address
saltstringDeterministic master salt
payerAddressstringAddress that paid for deployment
paymentTxHashstringTransaction hash for the deployment fee payment
deploymentTxHashstringTransaction hash for the wallet deployment
paymentCompletedbooleanWhether the fee payment settled
deploymentCompletedbooleanWhether the wallet is deployed on-chain
fundingRequestedbooleanWhether funding was requested
fundingCompletedbooleanWhether funding was transferred
fundingAmountstringFunding amount in wei
fundingTxHashstring | nullTransaction hash for funding, null if not funded
createdAtstringISO 8601 timestamp of record creation
updatedAtstringISO 8601 timestamp of last update

Master Salt Derivation

The master wallet salt is deterministic:
masterSalt = keccak256("b402-" + reversed(normalizedOwnerAddress))
Where normalizedOwnerAddress is the checksummed address with 0x stripped, then reversed as a string. This guarantees a single, predictable master wallet per owner.
import { keccak256, toUtf8Bytes, getAddress } from "ethers";

function getMasterSalt(ownerAddress: string): string {
  const normalized = getAddress(ownerAddress).slice(2); // remove 0x
  const reversed = normalized.split("").reverse().join("");
  return keccak256(toUtf8Bytes(`b402-${reversed}`));
}

Examples

cURL

curl https://facilitatorv3.b402.ai/wallet/0xAbC1234567890aBcDeF1234567890AbCdEf123456/master

TypeScript

const owner = "0xAbC1234567890aBcDeF1234567890AbCdEf123456";
const response = await fetch(
  `https://facilitatorv3.b402.ai/wallet/${owner}/master`
);
const masterWallet = await response.json();

console.log("Master wallet:", masterWallet.walletAddress);
console.log("Deployed:", masterWallet.deploymentCompleted);
console.log("Funded:", masterWallet.fundingCompleted);

Example Response

{
  "ownerAddress": "0xAbC1234567890aBcDeF1234567890AbCdEf123456",
  "walletAddress": "0x...deterministic_master_address",
  "salt": "0x...master_salt",
  "payerAddress": "0xAbC1234567890aBcDeF1234567890AbCdEf123456",
  "paymentTxHash": "0x...tx_hash",
  "deploymentTxHash": "0x...tx_hash",
  "paymentCompleted": true,
  "deploymentCompleted": true,
  "fundingRequested": true,
  "fundingCompleted": true,
  "fundingAmount": "1000000000000000000",
  "fundingTxHash": "0x...tx_hash",
  "createdAt": "2025-03-01T12:00:00.000Z",
  "updatedAt": "2025-03-01T12:00:05.000Z"
}

Error Codes

CodeHTTP StatusDescription
validation_error400Invalid owner address format
not_found404No master wallet found for this owner