欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单远程多签签名服务架构设计

程序员文章站 2022-05-28 15:00:16
...

 

 


简单远程多签签名服务架构设计
            
    
    博客分类: Google ethereumgolangsignature
 

优势

  • 服务暂时就两个,交易、签名服务
  • 支持已有trade服务,即不改变已有api服务,无缝连接
  • 协议走proto3,字节小+安全
  • 支持同步和异步服务
  • 支持机器人push
  • 支持多终端,web UI采用react,backend用golang1.12
  • 网络隔离
  • 支持m of N的多签的钱包交易

 劣势

  • 编程难度提升
  • 存在安全隐患

 

客户公司早期使用的Java语言作为服务端

 

syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.peckshield.dapp";
option java_outer_classname = "SignatureProto";
option objc_class_prefix = "SIGN";

package protos;


service SignatureRemote {

  rpc sign (SignatureRequest) returns (SignatureResponse) {} ;
}

message SignatureRequest {
  string nonce =1;

  int64 amount =2 ;

  uint64 gasLimit =3;

  int64 gasPrice=4;

  string toaddress = 5;
}


message SignatureResponse {
  string data = 1;
}

 

 

区块链服务采用golang开发:

type Server struct{}
func (s *Server) sign(context context.Context, in *pb.SignatureRequest)(*pb.SignatureResponse, error) {
        tx := types.NewTransaction(nonce, tokenAddress, value, gasLimit*2, gasPrice, data)
	signedTx, err := types.SignTx(tx, types.HomesteadSigner{}, privateKey)
	if err != nil {
		log.Fatal(err)
	}
	data, _ := rlp.EncodeToBytes(signedTx)
	fmt.Println(common.ToHex(data2))

	return &pb.SignatureResponse{Message: data}, nil


}
func main() {
 listen, err := net.Listen("tcp", grpcPort)
 if err != nil {
  fmt.Printf("failed to listen: %v\n", err)
  return
 }
 fmt.Printf("SUCCESS")

 

  • 简单远程多签签名服务架构设计
            
    
    博客分类: Google ethereumgolangsignature
  • 大小: 57.6 KB