Skip to content

Commit

Permalink
Merge pull request #57 from zhangcongcobo/feature/prime_broker_client
Browse files Browse the repository at this point in the history
feat: add prime broker client
  • Loading branch information
AeReach authored Apr 12, 2023
2 parents 17111e0 + 8c2dd7a commit f5c793e
Show file tree
Hide file tree
Showing 9 changed files with 346 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.cobo.custody.api.client.config.Env;
import com.cobo.custody.api.client.impl.CoboApiRestClientImpl;
import com.cobo.custody.api.client.impl.CoboMPCApiRestClientImpl;
import com.cobo.custody.api.client.impl.CoboMPCPrimeBrokerRestClientImpl;
import com.cobo.custody.api.client.impl.CoboWeb3ApiRestClientImpl;

public class CoboApiClientFactory {
Expand Down Expand Up @@ -33,4 +34,8 @@ public CoboWeb3ApiRestClient newWeb3RestClient() {
public CoboMPCApiRestClient newMPCRestClient() {
return new CoboMPCApiRestClientImpl(signer, env, debug);
}

public CoboMPCPrimeBrokerRestClient newMPCPrimeBrokerRestClient() {
return new CoboMPCPrimeBrokerRestClientImpl(signer, env, debug);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.cobo.custody.api.client;

import com.cobo.custody.api.client.domain.ApiResponse;
import com.cobo.custody.api.client.domain.account.PrimeBrokerAddress;
import com.cobo.custody.api.client.domain.account.PrimeBrokerBinderInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserAuthInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserBindInfo;
import com.fasterxml.jackson.core.JsonProcessingException;

import java.util.List;

public interface CoboMPCPrimeBrokerRestClient {

ApiResponse<PrimeBrokerBinderInfo> createBinding(String userId);

ApiResponse<PrimeBrokerUserBindInfo> queryBinding(String binderId);

ApiResponse<PrimeBrokerUserAuthInfo> queryUserAuth(String userId);

ApiResponse<PrimeBrokerUserAuthInfo> bindAddresses(String userId, List<PrimeBrokerAddress> addresses) throws JsonProcessingException;

ApiResponse<PrimeBrokerBinderInfo> changeBinding(String userId);

ApiResponse<Void> unbindBinding(String userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.cobo.custody.api.client.domain.account;

import com.fasterxml.jackson.annotation.JsonProperty;

public class PrimeBrokerAddress {
@JsonProperty(value = "chain_coin")
private String chainCoin;

@JsonProperty(value = "address")
private String address;

public PrimeBrokerAddress() {}

public PrimeBrokerAddress(String chainCoin, String address) {
this.chainCoin = chainCoin;
this.address = address;
}

public String getChainCoin() {
return chainCoin;
}

public void setChainCoin(String chainCoin) {
this.chainCoin = chainCoin;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

@Override
public String toString() {
return "PrimeBrokerAddress{" +
"chainCoin='" + chainCoin + '\'' +
", address='" + address + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.cobo.custody.api.client.domain.account;

import com.fasterxml.jackson.annotation.JsonProperty;

public class PrimeBrokerBinderInfo {
@JsonProperty(value = "binder_id")
private String binderId;

public String getBinderId() {
return binderId;
}

public void setBinderId(String binderId) {
this.binderId = binderId;
}

@Override
public String toString() {
return "PrimeBrokerBinderInfo{" +
"binderId='" + binderId + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.cobo.custody.api.client.domain.account;

import java.util.List;

public class PrimeBrokerUserAuthInfo {
private String pubkey;

private List<PrimeBrokerAddress> addresses;

public String getPubkey() {
return pubkey;
}

public void setPubkey(String pubkey) {
this.pubkey = pubkey;
}

public List<PrimeBrokerAddress> getAddresses() {
return addresses;
}

public void setAddresses(List<PrimeBrokerAddress> addresses) {
this.addresses = addresses;
}

@Override
public String toString() {
return "PrimeBrokerUserAuthInfo{" +
"pubkey='" + pubkey + '\'' +
", addresses=" + addresses +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.cobo.custody.api.client.domain.account;

import java.util.List;

public class PrimeBrokerUserBindInfo {
private String pubkey;

private Integer status;

private List<PrimeBrokerAddress> addresses;

public String getPubkey() {
return pubkey;
}

public void setPubkey(String pubkey) {
this.pubkey = pubkey;
}

public Integer getStatus() {
return status;
}

public void setStatus(Integer status) {
this.status = status;
}

public List<PrimeBrokerAddress> getAddresses() {
return addresses;
}

public void setAddresses(List<PrimeBrokerAddress> addresses) {
this.addresses = addresses;
}

@Override
public String toString() {
return "PrimeBrokerUserBindInfo{" +
"pubkey='" + pubkey + '\'' +
", status=" + status +
", addresses=" + addresses +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.cobo.custody.api.client.impl;

import com.cobo.custody.api.client.ApiSigner;
import com.cobo.custody.api.client.CoboMPCPrimeBrokerRestClient;
import com.cobo.custody.api.client.config.Env;
import com.cobo.custody.api.client.domain.ApiResponse;
import com.cobo.custody.api.client.domain.account.PrimeBrokerAddress;
import com.cobo.custody.api.client.domain.account.PrimeBrokerBinderInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserAuthInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserBindInfo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.util.List;

import static com.cobo.custody.api.client.impl.CoboApiServiceGenerator.createService;
import static com.cobo.custody.api.client.impl.CoboApiServiceGenerator.executeSync;

public class CoboMPCPrimeBrokerRestClientImpl implements CoboMPCPrimeBrokerRestClient {
private final CoboMPCPrimeBrokerService coboMPCPrimeBrokerService;

public CoboMPCPrimeBrokerRestClientImpl(ApiSigner signer, Env env, boolean debug) {
this.coboMPCPrimeBrokerService = createService(CoboMPCPrimeBrokerService.class, signer, env, debug);
}
@Override
public ApiResponse<PrimeBrokerBinderInfo> createBinding(String userId) {
return executeSync(coboMPCPrimeBrokerService.createBinding(userId));
}

@Override
public ApiResponse<PrimeBrokerUserBindInfo> queryBinding(String binderId) {
return executeSync(coboMPCPrimeBrokerService.queryBinding(binderId));
}

@Override
public ApiResponse<PrimeBrokerUserAuthInfo> queryUserAuth(String userId) {
return executeSync(coboMPCPrimeBrokerService.queryUserAuth(userId));
}

@Override
public ApiResponse<PrimeBrokerUserAuthInfo> bindAddresses(String userId, List<PrimeBrokerAddress> addresses) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return executeSync(coboMPCPrimeBrokerService.bindAddresses(userId, mapper.writeValueAsString(addresses)));
}

@Override
public ApiResponse<PrimeBrokerBinderInfo> changeBinding(String userId) {
return executeSync(coboMPCPrimeBrokerService.changeBinding(userId));
}

@Override
public ApiResponse<Void> unbindBinding(String userId) {
return executeSync(coboMPCPrimeBrokerService.unbindBinding(userId));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.cobo.custody.api.client.impl;

import com.cobo.custody.api.client.domain.ApiResponse;
import com.cobo.custody.api.client.domain.account.PrimeBrokerBinderInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserAuthInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserBindInfo;
import retrofit2.Call;
import retrofit2.http.*;

public interface CoboMPCPrimeBrokerService {
@FormUrlEncoded
@POST("/v1/custody/auth/create_binding/")
Call<ApiResponse<PrimeBrokerBinderInfo>> createBinding(@Field("user_id") String userId);

@GET("/v1/custody/auth/query_binding/")
Call<ApiResponse<PrimeBrokerUserBindInfo>> queryBinding(@Query("binder_id") String binderId);

@GET("/v1/custody/auth/query_user_auth/")
Call<ApiResponse<PrimeBrokerUserAuthInfo>> queryUserAuth(@Query("user_id") String userId);

@FormUrlEncoded
@POST("/v1/custody/auth/bind_addresses/")
Call<ApiResponse<PrimeBrokerUserAuthInfo>> bindAddresses(@Field("user_id") String userId, @Field("addresses") String addresses);

@FormUrlEncoded
@POST("/v1/custody/auth/change_binding/")
Call<ApiResponse<PrimeBrokerBinderInfo>> changeBinding(@Field("user_id") String userId);

@FormUrlEncoded
@POST("/v1/custody/auth/unbind_binding/")
Call<ApiResponse<Void>> unbindBinding(@Field("user_id") String userId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.cobo.custody.api.client.impl;

import com.cobo.custody.api.client.CoboApiClientFactory;
import com.cobo.custody.api.client.CoboMPCPrimeBrokerRestClient;
import com.cobo.custody.api.client.config.Env;
import com.cobo.custody.api.client.domain.ApiResponse;
import com.cobo.custody.api.client.domain.account.PrimeBrokerAddress;
import com.cobo.custody.api.client.domain.account.PrimeBrokerBinderInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserAuthInfo;
import com.cobo.custody.api.client.domain.account.PrimeBrokerUserBindInfo;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertTrue;


public class CoboMPCPrimeBrokerRestClientImplTest {
private String MPCAPISecret = "";
private CoboMPCPrimeBrokerRestClient primeBrokerClient;
private Env TestEnv = Env.SANDBOX;

@BeforeEach
public void setUp() throws Exception {
MPCAPISecret = System.getProperty("MPCApiSecret");
primeBrokerClient = CoboApiClientFactory.newInstance(
new LocalSigner(MPCAPISecret),
TestEnv,
false).newMPCPrimeBrokerRestClient();
}

@AfterEach
public void tearDown() {
}

@Test
public void testCreateBinding() {
String userId = String.valueOf(System.currentTimeMillis());
ApiResponse<PrimeBrokerBinderInfo> res = primeBrokerClient.createBinding(userId);
System.out.println(res);
assertTrue(res.isSuccess());
}

@Test
public void testQueryBinding() {
String binderId = "xmxGDg2hQsiqoo8D5WffyQ==";
ApiResponse<PrimeBrokerUserBindInfo> res = primeBrokerClient.queryBinding(binderId);
System.out.println(res);
assertTrue(res.isSuccess());
}

@Test
public void testQueryUserAuth() {
String userId = "";
ApiResponse<PrimeBrokerUserAuthInfo> res = primeBrokerClient.queryUserAuth(userId);
System.out.println(res);
assertTrue(res.isSuccess());
}

@Test
public void testChangeBinding() {
String userId = "yangming0407";
ApiResponse<PrimeBrokerBinderInfo> res = primeBrokerClient.changeBinding(userId);
System.out.println(res);
assertTrue(res.isSuccess());
}

@Test
public void testBindAddresses() throws JsonProcessingException {
String userId = "";
List<PrimeBrokerAddress> addresses = Arrays.asList(new PrimeBrokerAddress("ETH", "0x542b14c29b506e586e18c784f85419cca86cc185"));
ApiResponse<PrimeBrokerUserAuthInfo> res = primeBrokerClient.bindAddresses(userId, addresses);
System.out.println(res);
assertTrue(res.isSuccess());
}

@Test
public void testUnbindBinding() throws JsonProcessingException {
String userId = "yangming0407";
ApiResponse<Void> res = primeBrokerClient.unbindBinding(userId);
assertTrue(res.isSuccess());
}
}

0 comments on commit f5c793e

Please sign in to comment.