Skip to content

Commit eab3bbc

Browse files
authored
feat(TCK): ContractByteCodeQuery implementation (#2630)
Signed-off-by: Mustafa Uzun <mustafa.uzun@limechain.tech>
1 parent 7ec3ee2 commit eab3bbc

4 files changed

Lines changed: 72 additions & 0 deletions

File tree

tck/src/main/java/com/hedera/hashgraph/tck/methods/sdk/ContractService.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@
77
import com.hedera.hashgraph.tck.annotation.JSONRPC2Method;
88
import com.hedera.hashgraph.tck.annotation.JSONRPC2Service;
99
import com.hedera.hashgraph.tck.methods.AbstractJSONRPC2Service;
10+
import com.hedera.hashgraph.tck.methods.sdk.param.contract.ContractByteCodeQueryParams;
1011
import com.hedera.hashgraph.tck.methods.sdk.param.contract.ContractCallQueryParams;
1112
import com.hedera.hashgraph.tck.methods.sdk.param.contract.CreateContractParams;
1213
import com.hedera.hashgraph.tck.methods.sdk.param.contract.DeleteContractParams;
1314
import com.hedera.hashgraph.tck.methods.sdk.param.contract.ExecuteContractParams;
1415
import com.hedera.hashgraph.tck.methods.sdk.param.contract.InfoQueryContractParams;
1516
import com.hedera.hashgraph.tck.methods.sdk.param.contract.UpdateContractParams;
17+
import com.hedera.hashgraph.tck.methods.sdk.response.ContractByteCodeResponse;
1618
import com.hedera.hashgraph.tck.methods.sdk.response.ContractCallResponse;
1719
import com.hedera.hashgraph.tck.methods.sdk.response.ContractResponse;
1820
import com.hedera.hashgraph.tck.methods.sdk.response.ContractResponse.ContractInfoQueryResponse;
@@ -31,6 +33,16 @@ public ContractService(SdkService sdkService) {
3133
this.sdkService = sdkService;
3234
}
3335

36+
@JSONRPC2Method("contractByteCodeQuery")
37+
public ContractByteCodeResponse contractByteCodeQuery(final ContractByteCodeQueryParams params) throws Exception {
38+
ContractByteCodeQuery query = QueryBuilders.buildContractBytecode(params);
39+
Client client = sdkService.getClient(params.getSessionId());
40+
41+
ByteString response = query.execute(client);
42+
43+
return new ContractByteCodeResponse(query.getContractId().toString(), Hex.toHexString(response.toByteArray()));
44+
}
45+
3446
@JSONRPC2Method("contractCallQuery")
3547
public ContractCallResponse contractCallQuery(final ContractCallQueryParams params) throws Exception {
3648
ContractCallQuery query = QueryBuilders.buildContractCall(params);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
package com.hedera.hashgraph.tck.methods.sdk.param.contract;
3+
4+
import com.hedera.hashgraph.tck.methods.JSONRPC2Param;
5+
import com.hedera.hashgraph.tck.util.JSONRPCParamParser;
6+
import java.util.Map;
7+
import java.util.Optional;
8+
import lombok.AllArgsConstructor;
9+
import lombok.Getter;
10+
import lombok.NoArgsConstructor;
11+
12+
@Getter
13+
@AllArgsConstructor
14+
@NoArgsConstructor
15+
public class ContractByteCodeQueryParams extends JSONRPC2Param {
16+
private Optional<String> contractId;
17+
private Optional<String> queryPayment;
18+
private Optional<String> maxQueryPayment;
19+
private String sessionId;
20+
21+
@Override
22+
public ContractByteCodeQueryParams parse(Map<String, Object> jrpcParams) throws Exception {
23+
var parsedContractId = Optional.ofNullable((String) jrpcParams.get("contractId"));
24+
var parsedQueryPayment = Optional.ofNullable((String) jrpcParams.get("queryPayment"));
25+
var parsedMaxQueryPayment = Optional.ofNullable((String) jrpcParams.get("maxQueryPayment"));
26+
27+
return new ContractByteCodeQueryParams(
28+
parsedContractId,
29+
parsedQueryPayment,
30+
parsedMaxQueryPayment,
31+
JSONRPCParamParser.parseSessionId(jrpcParams));
32+
}
33+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
package com.hedera.hashgraph.tck.methods.sdk.response;
3+
4+
import lombok.Data;
5+
6+
@Data
7+
public class ContractByteCodeResponse {
8+
private final String contractId;
9+
private final String bytecode;
10+
}

tck/src/main/java/com/hedera/hashgraph/tck/util/QueryBuilders.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import com.hedera.hashgraph.sdk.AccountBalanceQuery;
55
import com.hedera.hashgraph.sdk.AccountId;
6+
import com.hedera.hashgraph.sdk.ContractByteCodeQuery;
67
import com.hedera.hashgraph.sdk.ContractCallQuery;
78
import com.hedera.hashgraph.sdk.ContractId;
89
import com.hedera.hashgraph.sdk.FileContentsQuery;
@@ -13,6 +14,7 @@
1314
import com.hedera.hashgraph.sdk.TokenInfoQuery;
1415
import com.hedera.hashgraph.sdk.TokenNftInfoQuery;
1516
import com.hedera.hashgraph.tck.methods.sdk.param.account.AccountBalanceQueryParams;
17+
import com.hedera.hashgraph.tck.methods.sdk.param.contract.ContractByteCodeQueryParams;
1618
import com.hedera.hashgraph.tck.methods.sdk.param.contract.ContractCallQueryParams;
1719
import com.hedera.hashgraph.tck.methods.sdk.param.file.FileContentsParams;
1820
import com.hedera.hashgraph.tck.methods.sdk.param.token.NftInfoQueryParams;
@@ -82,6 +84,21 @@ public static FileContentsQuery buildFileContents(FileContentsParams params) {
8284
}
8385
}
8486

87+
public static ContractByteCodeQuery buildContractBytecode(ContractByteCodeQueryParams params) {
88+
ContractByteCodeQuery query = new ContractByteCodeQuery().setGrpcDeadline(DEFAULT_GRPC_DEADLINE);
89+
90+
params.getContractId().ifPresent(contractId -> query.setContractId(ContractId.fromString(contractId)));
91+
92+
params.getQueryPayment()
93+
.ifPresent(queryPayment -> query.setQueryPayment(Hbar.fromTinybars(Long.parseLong(queryPayment))));
94+
95+
params.getMaxQueryPayment()
96+
.ifPresent(maxQueryPayment ->
97+
query.setMaxQueryPayment(Hbar.fromTinybars(Long.parseLong(maxQueryPayment))));
98+
99+
return query;
100+
}
101+
85102
public static ContractCallQuery buildContractCall(ContractCallQueryParams params) {
86103
ContractCallQuery query = new ContractCallQuery().setGrpcDeadline((DEFAULT_GRPC_DEADLINE));
87104
if (params.getContractId() != null) {

0 commit comments

Comments
 (0)