Skip to content

Commit 934eae2

Browse files
authored
Merge pull request #60 from Staketab/dev
update parse response for txSend and checkBlocksFromZkCloudWorker
2 parents eadf020 + f9d1054 commit 934eae2

File tree

4 files changed

+70
-23
lines changed

4 files changed

+70
-23
lines changed

src/main/java/com/staketab/minanames/dto/ZkCloudWorkerArgs.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
public class ZkCloudWorkerArgs {
1515
private String contractAddress;
1616
private String domain;
17+
private String startBlock;
1718
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.staketab.minanames.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
8+
@Data
9+
@Builder
10+
@AllArgsConstructor
11+
@JsonInclude(JsonInclude.Include.NON_NULL)
12+
public class ZkCloudWorkerSendTxResponse {
13+
private String txId;
14+
private String transaction;
15+
private long timeReceived;
16+
private String received;
17+
}

src/main/java/com/staketab/minanames/service/ZkCloudWorkerService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public interface ZkCloudWorkerService {
1010

1111
void sendTxs(List<PayableTransactionEntity> appliedTxs);
1212

13-
ZkCloudWorkerContractDataResponse getBlockInfo();
13+
ZkCloudWorkerContractDataResponse getBlockInfo(String startBlock);
1414

1515
void sendCreateTask();
1616

src/main/java/com/staketab/minanames/service/impl/ZkCloudWorkerServiceImpl.java

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.staketab.minanames.dto.ZkCloudWorkerDataDTO;
1919
import com.staketab.minanames.dto.ZkCloudWorkerGetBlockInfoResponse;
2020
import com.staketab.minanames.dto.ZkCloudWorkerRequestDTO;
21+
import com.staketab.minanames.dto.ZkCloudWorkerSendTxResponse;
2122
import com.staketab.minanames.dto.ZkCloudWorkerTransaction;
2223
import com.staketab.minanames.entity.DomainEntity;
2324
import com.staketab.minanames.entity.IpfsMetadataCloudWorkerProperty;
@@ -37,6 +38,7 @@
3738
import java.math.RoundingMode;
3839
import java.sql.Timestamp;
3940
import java.time.LocalDateTime;
41+
import java.util.ArrayList;
4042
import java.util.List;
4143
import java.util.Map;
4244
import java.util.Objects;
@@ -102,8 +104,8 @@ public void sendTxs(List<PayableTransactionEntity> appliedTxs) {
102104
}
103105

104106
@Override
105-
public ZkCloudWorkerContractDataResponse getBlockInfo() {
106-
ZkCloudWorkerDataDTO zkCloudWorkerDataDTO = mapToZkCloudWorkerDataDTO(List.of(), GET_BLOCK_INFO);
107+
public ZkCloudWorkerContractDataResponse getBlockInfo(String startBlock) {
108+
ZkCloudWorkerDataDTO zkCloudWorkerDataDTO = mapToZkCloudWorkerDataDTO(GET_BLOCK_INFO, null, startBlock);
107109
ZkCloudWorkerRequestDTO zkCloudWorkerRequestDTO = mapToZkCloudWorkerRequestDTO(zkCloudWorkerDataDTO, GET_BLOCK_INFO);
108110
ResponseEntity<String> stringResponseEntity = zkCloudWorkerClient.sendToZkCloudWorker(zkCloudWorkerRequestDTO);
109111
String body = stringResponseEntity.getBody();
@@ -122,29 +124,22 @@ public void sendCreateTask() {
122124
@Override
123125
public void checkBlocksFromZkCloudWorker() {
124126
long topBlockNumber = domainRepository.findTopBlockNumber() != null ? domainRepository.findTopBlockNumber() : 0L;
125-
ZkCloudWorkerContractDataResponse blockInfo = getBlockInfo();
126-
List<ZkCloudWorkerBlocksResponse> finalBlocks = blockInfo.getBlocks()
127+
ZkCloudWorkerContractDataResponse blockInfo = getBlockInfo(null);
128+
List<ZkCloudWorkerBlocksResponse> blocks = blockInfo.getBlocks();
129+
List<ZkCloudWorkerBlocksResponse> finalBlocks = blocks
127130
.stream()
128131
.filter(ZkCloudWorkerBlocksResponse::isFinal)
129-
.toList()
130-
.reversed();
131-
132-
for (ZkCloudWorkerBlocksResponse finalBlock : finalBlocks) {
133-
if (finalBlock.getBlockNumber() <= topBlockNumber) {
134-
continue;
135-
}
136-
String ipfs = finalBlock.getIpfs();
137-
IpfsZkCloudWorkerResponse blockByIpfs = ipfsZkCloudWorkerClient.getBlockByIpfs(ipfs);
138-
List<IpfsZkCloudWorkerTransactionWrapperResponse> transactions = blockByIpfs.getTransactions();
132+
.filter(value -> value.getBlockNumber() > topBlockNumber)
133+
.collect(Collectors.toList());
134+
getMoreBlocksIfNeed(finalBlocks, blocks, topBlockNumber);
135+
List<ZkCloudWorkerBlocksResponse> cloudWorkerBlocksResponses = finalBlocks.reversed();
139136

140-
activateNewDomains(finalBlock, transactions, ipfs);
141-
updateOldDomains(finalBlock, transactions);
142-
}
137+
addNewDomainsOrUpdateOld(cloudWorkerBlocksResponses, topBlockNumber);
143138
}
144139

145140
@Override
146141
public IpfsDomainMetadataZkDataDTO getDomainMetadata(String domainMetadata) {
147-
ZkCloudWorkerDataDTO zkCloudWorkerDataDTO = mapToZkCloudWorkerDataDTO(GET_DOMAIN_METADATA, domainMetadata);
142+
ZkCloudWorkerDataDTO zkCloudWorkerDataDTO = mapToZkCloudWorkerDataDTO(GET_DOMAIN_METADATA, domainMetadata, null);
148143
ZkCloudWorkerRequestDTO zkCloudWorkerRequestDTO = mapToZkCloudWorkerRequestDTO(zkCloudWorkerDataDTO, GET_DOMAIN_METADATA);
149144
ResponseEntity<String> stringResponseEntity = zkCloudWorkerClient.sendToZkCloudWorker(zkCloudWorkerRequestDTO);
150145
String body = stringResponseEntity.getBody();
@@ -153,6 +148,39 @@ public IpfsDomainMetadataZkDataDTO getDomainMetadata(String domainMetadata) {
153148
return gson.fromJson(result, IpfsDomainMetadataZkDataDTO.class);
154149
}
155150

151+
private void getMoreBlocksIfNeed(List<ZkCloudWorkerBlocksResponse> finalBlocks, List<ZkCloudWorkerBlocksResponse> blocks, long topBlockNumber) {
152+
List<ZkCloudWorkerBlocksResponse> allBlocks = new ArrayList<>();
153+
int blockNumber = finalBlocks.getLast().getBlockNumber();
154+
if (!finalBlocks.isEmpty() && blocks.size() == finalBlocks.size()) {
155+
String startBlock = finalBlocks.getLast().getPreviousBlockAddress();
156+
while (blockNumber != topBlockNumber + 1) {
157+
List<ZkCloudWorkerBlocksResponse> cloudWorkerBlocksResponses = getBlockInfo(startBlock).getBlocks()
158+
.stream()
159+
.filter(ZkCloudWorkerBlocksResponse::isFinal)
160+
.filter(value -> value.getBlockNumber() > topBlockNumber)
161+
.toList();
162+
allBlocks.addAll(cloudWorkerBlocksResponses);
163+
blockNumber = cloudWorkerBlocksResponses.getLast().getBlockNumber();
164+
startBlock = cloudWorkerBlocksResponses.getLast().getPreviousBlockAddress();
165+
}
166+
}
167+
finalBlocks.addAll(allBlocks);
168+
}
169+
170+
private void addNewDomainsOrUpdateOld(List<ZkCloudWorkerBlocksResponse> cloudWorkerBlocksResponses, long topBlockNumber) {
171+
for (ZkCloudWorkerBlocksResponse finalBlock : cloudWorkerBlocksResponses) {
172+
if (finalBlock.getBlockNumber() <= topBlockNumber) {
173+
continue;
174+
}
175+
String ipfs = finalBlock.getIpfs();
176+
IpfsZkCloudWorkerResponse blockByIpfs = ipfsZkCloudWorkerClient.getBlockByIpfs(ipfs);
177+
List<IpfsZkCloudWorkerTransactionWrapperResponse> transactions = blockByIpfs.getTransactions();
178+
179+
activateNewDomains(finalBlock, transactions, ipfs);
180+
updateOldDomains(finalBlock, transactions);
181+
}
182+
}
183+
156184
private void activateNewDomains(ZkCloudWorkerBlocksResponse finalBlock, List<IpfsZkCloudWorkerTransactionWrapperResponse> transactions, String ipfs) {
157185
Map<String, IpfsZkCloudWorkerTransactionResponse> cloudWorkerTransactionResponseMap = transactions
158186
.stream()
@@ -251,14 +279,14 @@ private void setMetadata(String newMetadata, DomainEntity domainEntity, String b
251279
}
252280

253281
private void setTxIds(ResponseEntity<String> stringResponseEntity, List<DomainEntity> domainEntities) {
254-
List<String> txIds = gson.fromJson(stringResponseEntity.getBody(), new TypeToken<List<String>>() {
282+
List<ZkCloudWorkerSendTxResponse> txIds = gson.fromJson(stringResponseEntity.getBody(), new TypeToken<List<ZkCloudWorkerSendTxResponse>>() {
255283
}.getType());
256284

257285
for (int i = 0; i < domainEntities.size(); i++) {
258286
DomainEntity domainEntity = domainEntities.get(i);
259287
if (txIds != null) {
260-
String txId = txIds.get(i);
261-
domainEntity.setZkTxId(txId);
288+
ZkCloudWorkerSendTxResponse zkCloudWorkerSendTxResponse = txIds.get(i);
289+
domainEntity.setZkTxId(zkCloudWorkerSendTxResponse.getTxId());
262290
}
263291
}
264292
}
@@ -278,13 +306,14 @@ private ZkCloudWorkerDataDTO mapToZkCloudWorkerDataDTO(List<String> tx, ZkCloudW
278306
.build();
279307
}
280308

281-
private ZkCloudWorkerDataDTO mapToZkCloudWorkerDataDTO(ZkCloudWorkerTask zkCloudWorkerTask, String domainMetadata) {
309+
private ZkCloudWorkerDataDTO mapToZkCloudWorkerDataDTO(ZkCloudWorkerTask zkCloudWorkerTask, String domainMetadata, String startBlock) {
282310
return ZkCloudWorkerDataDTO.builder()
283311
.task(zkCloudWorkerTask.getName())
284312
.metadata(zkCloudWorkerTask.getMetadata())
285313
.args(mapArgsToString(ZkCloudWorkerArgs.builder()
286314
.contractAddress(mnsContract)
287315
.domain(domainMetadata)
316+
.startBlock(startBlock)
288317
.build()))
289318
.build();
290319
}

0 commit comments

Comments
 (0)