syntax = "proto3";
package service;

option java_package = "proto.keyManager";
option java_outer_classname = "keyManagerProto";

option go_package = "../service";

message CreateMnemonicRequest {
    string name = 1; // 商户名字，名字全局唯一，每个商户只能生成一个助记词
    int64 mnemonicType = 2; // 0 or 1, 0代表12个助记词，1代表24个助记词
}

message CreateMnemonicResponse {
  string code = 1;  // 响应码, 成功是200
  string msg = 2;   // 响应描述信息
}

message CreateKeyRequest {
    string name = 1; // 商户名字，如果该商户未创建助记词，则返回错误
    string network = 2; // 链网络名称，"eth" 或 "tron"
    int64 index = 3; // 派生账户使用的index，如果该index已被使用，则返回错误
}

message GetIndexRequest {
    string network = 1; // 链网络名称，"eth" 或 "tron"
    string address = 2; // 查询该地址对应的商户名字和index
}

message GetAddressRequest {
    string name = 1; // 商户名字，如果该商户未创建助记词，则返回错误
    string network = 2; // 链网络名称，"eth" 或 "tron"
    int64 index = 3; // 派生账户使用的index
}

message KeyResponse {
  string code = 1;  // 响应码, 成功是200
  string msg = 2;   // 响应描述信息
  string network = 3; // 链网络名称，"eth" 或 "tron"
  string name = 4; // 商户名字
  int64 index = 5; // 派生账户使用的index
  string address = 6; // 地址
}

message SignRequest {
   string network = 1; // 链网络名称，"eth" 或 "tron"
   string sender = 2; // 签名地址
   string tx = 3; // 编码的交易，先将eth/tron交易Marshal为字符数组，再编码为hex字符串
}

message SignResponse {
  string code = 1;  // 响应码, 成功是200
  string msg = 2;   // 响应描述信息
  string network = 3; // 链网络名称，"eth" 或 "tron"
  string sender = 4; // 签名地址
  string signedTx = 5; // 编码的已签名交易，先将eth/tron已签名交易Marshal为字符数组，再编码为hex字符串
}

service KeyManager {
    rpc CreateMnemonic(CreateMnemonicRequest) returns(CreateMnemonicResponse) {}
    rpc CreateKey(CreateKeyRequest) returns(KeyResponse) {}
    rpc GetIndex(GetIndexRequest) returns(KeyResponse) {}
    rpc GetAddress(GetAddressRequest) returns(KeyResponse) {}
    rpc Sign(SignRequest) returns(SignResponse) {}
}