message: Use backupkeynonce if signingKeyNonce is missing
  Ticket:
diff: @@ -101,6 +101,7 @@ interface SignFinalOptions {
  halfSigned: {
  expireTime: number;
  contractSequenceId: number;
  + backupKeyNonce: number;
  signature: string;
  };
  nextContractSequenceId?: number;
  @@ -112,7 +113,7 @@ interface SignFinalOptions {
  recipients: Recipient[];
  }
  -interface SignTransactionOptions extends SignFinalOptions {
  +export interface SignTransactionOptions extends SignFinalOptions {
  isLastSignature?: boolean;
  expireTime: number;
  sequenceId: number;
  @@ -494,8 +495,10 @@ export class Eth extends BaseCoin {
  signFinal(params: SignFinalOptions): FullySignedTransaction {
  const txPrebuild = params.txPrebuild;
  - if (!_.isNumber(params.signingKeyNonce)) {
  - throw new Error('must have signingKeyNonce as a parameter, and it must be a number');
  + if (!_.isNumber(params.signingKeyNonce) && !_.isNumber(params.txPrebuild.halfSigned.backupKeyNonce)) {
  + throw new Error(
  + 'must have at least one of signingKeyNonce and backupKeyNonce as a parameter, and it must be a number'
  + );
  }
  if (_.isUndefined(params.walletContractAddress)) {
  throw new Error('params must include walletContractAddress, but got undefined');
  @@ -518,7 +521,7 @@ export class Eth extends BaseCoin {
  const ethTxParams = {
  to: params.walletContractAddress,
  - nonce: params.signingKeyNonce,
  + nonce: params.signingKeyNonce || params.txPrebuild.halfSigned.backupKeyNonce,
  value: 0,
  gasPrice: new optionalDeps.ethUtil.BN(txPrebuild.gasPrice),
  gasLimit: new optionalDeps.ethUtil.BN(txPrebuild.gasLimit),
  