package com.liquidnet.common.third.zxlnft.service;

import com.liquidnet.common.third.zxlnft.dto.wallet.*;

/**
 * @author AnJiabin <anjiabin@zhengzai.tv>
 * @version V1.0
 * @Description: TODO
 * @class: WalletSdkService
 * @Package com.liquidnet.common.third.zxlnft.service
 * @Copyright: LightNet @ Copyright (c) 2021
 * @date 2022/2/17 15:53
 */
public interface WalletSdkService {
  /**
   * 1.生成助记词
   * @param req
   * @return
   */
  CreateMnemonicResp createMnemonic(CreateMnemonicReq req);

  /**
   * 2.Api签名
   * @param req
   * @return
   */
  GenerateApiSignResp generateApiSign(GenerateApiSignReq req);

  /**
   * 3.文件上传至cos
   * @param req
   * @return
   */
  UploadToCosResp uploadToCos(UploadToCosReq req);

  /**
   * 4.文件上传至cos(form-data文件提交)
   * @param req
   * @return
   */
  UploadFileToCosResp uploadFileToCos(UploadFileToCosReq req);

  /**
   * 5.派生生成子公司钥对
   * @param req
   * @return
   */
  DeriveKeyPairResp deriveKeyPair(DeriveKeyPairReq req);

  /**
   * 6.sdk-签名
   * @param req
   * @return
   */
  SignByPriKeyResp signByPriKey(SignByPriKeyReq req);

  /**
   * 7.sdk-私钥生成对应公钥
   * @param req
   * @return
   */
  PriKey2PubKeyResp priKey2PubKey(PriKey2PubKeyReq req);

  /**
   * 8.sdk-公钥生成对应地址
   * @param req
   * @return
   */
  PubKey2AddressResp pubKey2Address(PubKey2AddressReq req);

  /**
   * 9.sdk-私钥生成对应地址
   * @param req
   * @return
   */
  PriKey2AddressResp priKey2Address(PriKey2AddressReq req);

  /**
   * 10.sdk-签名
   * @param req
   * @return
   */
  VerifyByPubKeyResp verifyByPubKey(VerifyByPubKeyReq req);

  /**
   * 11.sdk-SM3哈希
   * @param req
   * @return
   */
  SM3HashResp sM3Hash(SM3HashReq req);

  /**
   * 12.sdk-SM3哈希EnCode
   * @param req
   * @return
   */
  SM3HashEncodeResp sM3HashEncode(SM3HashEncodeReq req);
}