Sur cette page
EthSignRequest
La classe EthSignRequest gère les demandes de signature Ethereum.
Encode les données à signer pour que l’appareil les scanne. Ne crée ni ne diffuse la transaction.
Énumération DataType
enum DataType {
transaction = 1, // Legacy transaction (RLP encoded unsigned data)
typedData = 2, // EIP-712 typed data (JSON string as bytes)
personalMessage = 3, // Personal message signing
typedTransaction = 4 // Typed transaction (EIP-1559)
}Paramètres
| Paramètre | Type | Description |
|---|---|---|
requestId | Buffer | Champ facultatif du constructeur : octets UUID ; l’utilitaire de haut niveau ci-dessous accepte une chaîne UUID |
signData | Buffer | Données à signer |
dataType | DataType | Type des données à signer |
chainId | number | ID de chaîne (facultatif) |
derivationPath | CryptoKeypath | Chemin de dérivation |
address | Buffer | Octets de l’adresse du signataire (facultatif) |
origin | string | Source de la demande (facultative) |
Exemple UR
UR:ETH-SIGN-REQUEST/ONADTPDAGDSWNNYAHGTOKPFPIAPANNROLNSAVYDTHHAOHDECAOWFLYLDLFAAUELPATAEGWSOLALPBAVYGUYTHNLFGMAYMWSGBYZOIYHTRDCFBANBFPBNDSPRJPNSDLGLBYIMJELTCNLNWZJLSEAEAELARTAXAAAACSLDAHTAADDYOEADLECSDWYKCSFNYKAEYKAEWKADWKAOCYTIZSYLCNSSDKGOCAExemples
Ces exemples utilisent KeystoneEthereumSDK.generateSignRequest, qui accepte des chaînes hexadécimales et une chaîne UUID. Ses noms de paramètres diffèrent de ceux du constructeur de registre ci-dessus. unsignedTxHex et unsignedLegacyHex sont les octets de signature non signés issus de votre bibliothèque de transactions, sans préfixe 0x. Pour EIP-1559, incluez l’octet de type 02. typedDataJson doit contenir l’objet EIP-712 complet.
Utilisez le chemin réel et l’empreinte maîtresse exportés par l’appareil. Conservez l’identifiant de la demande et la transaction non signée d’origine jusqu’à la vérification de la réponse.
Transaction EIP-1559
import { KeystoneEthereumSDK } from '@keystonehq/keystone-sdk';
const eth = new KeystoneEthereumSDK();
const requestId = globalThis.crypto.randomUUID();
const ur = eth.generateSignRequest({
requestId, // uuid string
signData: unsignedTxHex, // hex without 0x
dataType: 4, // typedTransaction
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
chainId: 1,
origin: 'your-app',
});
// Encode UR into animated QR frames and displayTransaction historique
const ur = eth.generateSignRequest({
requestId,
signData: unsignedLegacyHex,
dataType: 1, // transaction
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
chainId: 1,
origin: 'your-app',
});TypedData EIP-712
const dataHex = Buffer.from(typedDataJson, 'utf8').toString('hex');
const ur = eth.generateSignRequest({
requestId,
signData: dataHex,
dataType: 2, // typedData
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
origin: 'your-app',
});Message personnel
const dataHex = Buffer.from(message, 'utf8').toString('hex');
const ur = eth.generateSignRequest({
requestId,
signData: dataHex,
dataType: 3, // personalMessage
path: "m/44'/60'/0'/0/0",
xfp: '12345678',
origin: 'your-app',
});Étape suivante
Après la signature par l’appareil, décodez la réponse avec EthSignature.