跳到主要内容

cardanoGetAddress

使用要求

  • 固件版本要求
    • UKey Lite 24 / UKey Lite 25: 1.1.0
    • UKey Core 26: 1.1.0

Cardano:获取地址

根据指定的 BIP32-Ed25519 路径派生地址,并把结果返回给调用方。开启设备展示时,用户需要在 Ukey Wallet 上核对并确认导出该地址。

const response = await HardwareSDK.cardanoGetAddress(
connectId,
deviceId,
params,
);

参数

可选通用参数

导出单个地址

  • addressParameters - 必需,地址参数对象,具体字段说明请参考下方内容。
  • protocolMagic - 必需 Integer,用于指定网络魔数;主网为 764824073,Preprod 测试网为 1,Preview 测试网为 2
  • networkId - 必需 Integer,用于标识当前网络;主网为 1,测试网为 0
  • address - 可选 string,用于执行地址校验;详情请参考下方“处理按钮请求”部分。
  • showOnUKey - 可选 boolean,用于控制是否在设备上展示地址确认信息;默认值为 true
  • derivationType - 可选 CardanoDerivationType,用于设置地址派生方式;默认采用 ICARUS=1
  • isCheck - 可选 boolean,用于仅执行基础地址检查。

导出批量地址

  • bundle - Array 数组对象,包含单个地址请求所需的字段。

地址参数

  • addressType - 必需 CardanoAddressType | number,用于指定地址类型;可传入 Flow 中的 CARDANO.ADDRESS_TYPE 对象值,或 TypeScript 中的 CardanoAddressType 枚举值,支持全部地址类型。
  • path - 必需 string | Array<number>,用于指定支付路径;字符串数组最小长度限制为 5
  • stakingPath - 可选 string | Array<number>,用于指定质押路径;字符串数组最小长度限制为 5,可用于基础地址和奖励地址派生。
  • stakingKeyHash - 可选 string,质押密钥哈希的十六进制字符串;在派生基础地址时可替代 stakingPath
  • certificatePointer - 可选 CardanoCertificatePointer,用于派生指针地址;对象中必须包含 number 类型的 blockIndextxIndexcertificateIndex
  • paymentScriptHash - 可选 string,支付脚本哈希的十六进制字符串。
  • stakingScriptHash - 可选 string,质押脚本哈希的十六进制字符串。

示例

在设备上核对第二个 Cardano 账户的 Byron 地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.BYRON,
path: "m/44'/1815'/1'/0/1",
},
protocolMagic: 764824073,
networkId: 1,
});

在设备上核对第二个 Cardano 账户的基础地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.BASE,
path: "m/1852'/1815'/1'/0/1",
stakingPath: "m/1852'/1815'/1'/2/0",
},
protocolMagic: 764824073,
networkId: 1,
});

显示带有脚本支付部分的基础地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.BASE_SCRIPT_KEY,
paymentScriptHash:
"1a6bdcf7b2e0c1d9835f71ea425a98326dd0f89cc7d10ab704e679af",
stakingPath: "m/1852'/1815'/1'/2/0",
},
protocolMagic: 764824073,
networkId: 1,
});

显示带有脚本质押部分的基础地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.BASE_KEY_SCRIPT,
path: "m/1852'/1815'/1'/0/1",
stakingScriptHash:
"9e8cfcd8b6902d8c60c8da4a2182fde4c62c1437a66330d9666454ba",
},
protocolMagic: 764824073,
networkId: 1,
});

显示支付和质押部分都是脚本的基础地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.BASE_SCRIPT_SCRIPT,
paymentScriptHash:
"1a6bdcf7b2e0c1d9835f71ea425a98326dd0f89cc7d10ab704e679af",
stakingScriptHash:
"9e8cfcd8b6902d8c60c8da4a2182fde4c62c1437a66330d9666454ba",
},
protocolMagic: 764824073,
networkId: 1,
});

在设备上核对第二个 Cardano 账户的指针地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.POINTER,
path: "m/1852'/1815'/1'/0/1",
certificatePointer: {
blockIndex: 2,
txIndex: 3,
certificateIndex: 4,
},
},
protocolMagic: 764824073,
networkId: 1,
});

显示指针脚本地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.POINTER_SCRIPT,
paymentScriptHash:
"1a6bdcf7b2e0c1d9835f71ea425a98326dd0f89cc7d10ab704e679af",
certificatePointer: {
blockIndex: 2,
txIndex: 3,
certificateIndex: 4,
},
},
protocolMagic: 764824073,
networkId: 1,
});

在设备上核对第二个 Cardano 账户的企业地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.ENTERPRISE,
path: "m/1852'/1815'/1'/0/1",
},
protocolMagic: 764824073,
networkId: 1,
});

显示企业脚本地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.ENTERPRISE_SCRIPT,
paymentScriptHash:
"1a6bdcf7b2e0c1d9835f71ea425a98326dd0f89cc7d10ab704e679af",
},
protocolMagic: 764824073,
networkId: 1,
});

在设备上核对第二个 Cardano 账户的奖励地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.REWARD,
stakingPath: "m/1852'/1815'/1'/2/0",
},
protocolMagic: 764824073,
networkId: 1,
});

显示奖励脚本地址:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
addressParameters: {
addressType: CardanoAddressType.REWARD_SCRIPT,
stakingScriptHash:
"9e8cfcd8b6902d8c60c8da4a2182fde4c62c1437a66330d9666454ba",
},
protocolMagic: 764824073,
networkId: 1,
});

批量获取 Cardano 地址,并跳过设备展示:

HardwareSDK.cardanoGetAddress(connectId, deviceId, {
bundle: [
// Byron 地址,第4个派生账户路径
{
addressParameters: {
addressType: 8,
path: "m/44'/1815'/3'/0/0",
},
protocolMagic: 764824073,
networkId: 1,
showOnUKey: false,
},
// 带有质押密钥哈希的基础地址,第5个派生账户路径
{
addressParameters: {
addressType: 0,
path: "m/1852'/1815'/4'/0/0",
stakingKeyHash:
"2cd539f5831813fce6ebc50c286435d2a3edacc87dd6eb067f4d9e10",
},
protocolMagic: 764824073,
networkId: 1,
showOnUKey: false,
},
// Byron 地址,第6个派生账户路径,测试网
{
addressParameters: {
addressType: 8,
path: "m/44'/1815'/5'/0/2",
},
protocolMagic: 1,
networkId: 0,
showOnUKey: false,
},
],
});

返回结果

单个地址返回示例

{
success: true,
payload: {
addressParameters: {
addressType: number,
path: Array<number>, // 派生路径
stakingPath?: Array<number>, // 质押派生路径
stakingKeyHash?: string,
certificatePointer?: {
blockIndex: number,
txIndex: number,
certificatePointer: number,
},
paymentScriptHash?: string,
stakingScriptHash?: string,
}
serializedPath?: string,
serializedStakingPath?: string,
protocolMagic: number,
networkId: number,
address: string,
xpub: string,
stakeAddress: string, // 如果创建了基础地址,会同时返回质押地址
}
}

批量地址的结果

{
success: true,
payload: [
{
addressParameters: {
addressType: number,
path: Array<number>, // 派生路径
stakingPath?: Array<number>, // 质押派生路径
stakingKeyHash?: string,
certificatePointer?: {
blockIndex: number,
txIndex: number,
certificatePointer: number,
},
paymentScriptHash?: string,
stakingScriptHash?: string,
}
serializedPath?: string,
serializedStakingPath?: string,
protocolMagic: number,
networkId: number,
address: string,
},
{
addressParameters: {
addressType: number,
path: Array<number>, // 派生路径
stakingPath?: Array<number>, // 质押派生路径
stakingKeyHash?: string,
certificatePointer?: {
blockIndex: number,
txIndex: number,
certificatePointer: number,
},
paymentScriptHash?: string,
stakingScriptHash?: string,
}
serializedPath?: string,
serializedStakingPath?: string,
protocolMagic: number,
networkId: number,
address: string,
},
{
addressParameters: {
addressType: number,
path: Array<number>, // 派生路径
stakingPath?: Array<number>, // 质押派生路径
stakingKeyHash?: string,
certificatePointer?: {
blockIndex: number,
txIndex: number,
certificatePointer: number,
},
paymentScriptHash?: string,
stakingScriptHash?: string,
}
serializedPath?: string,
serializedStakingPath?: string,
protocolMagic: number,
networkId: number,
address: string,
},
]
}

错误

{
success: false,
payload: {
error: string // 错误消息
}
}