Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitca4b7d5

Browse files
committed
Refactoring of token transfers
- Inclusion of tokenID in Erc721 transfers- Support for Erc1155 transfers
1 parenta1cfd6f commitca4b7d5

File tree

12 files changed

+362
-18
lines changed

12 files changed

+362
-18
lines changed

‎src/main/java/io/api/etherscan/core/IAccountApi.java‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,59 @@ public interface IAccountApi {
137137
*/
138138
@NotNull
139139
List<Block>minedBlocks(Stringaddress)throwsApiException;
140+
141+
@NotNull
142+
List<TxErc20>erc20Transfers(Stringaddress)throwsApiException;
143+
144+
@NotNull
145+
List<TxErc20>erc20Transfers(Stringaddress,longstartBlock)throwsApiException;
146+
147+
/**
148+
* All ERC-20 token txs for given address
149+
*
150+
* @param address get txs for
151+
* @param startBlock tx from this blockNumber
152+
* @param endBlock tx to this blockNumber
153+
* @return txs for address
154+
* @throws ApiException parent exception class
155+
*/
156+
@NotNull
157+
List<TxErc20>erc20Transfers(Stringaddress,longstartBlock,longendBlock)throwsApiException;
158+
159+
@NotNull
160+
List<TxErc721>erc721Transfers(Stringaddress)throwsApiException;
161+
162+
@NotNull
163+
List<TxErc721>erc721Transfers(Stringaddress,longstartBlock)throwsApiException;
164+
165+
/**
166+
* All ERC-721 (NFT) token txs for given address
167+
*
168+
* @param address get txs for
169+
* @param startBlock tx from this blockNumber
170+
* @param endBlock tx to this blockNumber
171+
* @return txs for address
172+
* @throws ApiException parent exception class
173+
*/
174+
@NotNull
175+
List<TxErc721>erc721Transfers(Stringaddress,longstartBlock,longendBlock)throwsApiException;
176+
177+
@NotNull
178+
List<TxErc1155>erc1155Transfers(Stringaddress)throwsApiException;
179+
180+
@NotNull
181+
List<TxErc1155>erc1155Transfers(Stringaddress,longstartBlock)throwsApiException;
182+
183+
/**
184+
* All ERC-1155 token txs for given address
185+
*
186+
* @param address get txs for
187+
* @param startBlock tx from this blockNumber
188+
* @param endBlock tx to this blockNumber
189+
* @return txs for address
190+
* @throws ApiException parent exception class
191+
*/
192+
@NotNull
193+
List<TxErc1155>erc1155Transfers(Stringaddress,longstartBlock,longendBlock)throwsApiException;
194+
140195
}

‎src/main/java/io/api/etherscan/core/impl/AccountApiProvider.java‎

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public class AccountApiProvider extends BasicProvider implements IAccountApi {
3535
privatestaticfinalStringACT_TX_INTERNAL_ACTION =ACT_PREFIX +"txlistinternal";
3636
privatestaticfinalStringACT_TX_TOKEN_ACTION =ACT_PREFIX +"tokentx";
3737
privatestaticfinalStringACT_TX_NFT_TOKEN_ACTION =ACT_PREFIX +"tokennfttx";
38+
privatestaticfinalStringACT_TX_1155_TOKEN_ACTION =ACT_PREFIX +"token1155tx";
3839
privatestaticfinalStringACT_MINED_ACTION =ACT_PREFIX +"getminedblocks";
3940

4041
privatestaticfinalStringBLOCK_TYPE_PARAM ="&blocktype=blocks";
@@ -265,4 +266,70 @@ public List<Block> minedBlocks(final String address) throws ApiException {
265266

266267
returngetRequestUsingOffset(urlParams,BlockResponseTO.class);
267268
}
269+
270+
@NotNull
271+
@Override
272+
publicList<TxErc20>erc20Transfers(Stringaddress)throwsApiException {
273+
returnerc20Transfers(address,MIN_START_BLOCK);
274+
}
275+
276+
@NotNull
277+
@Override
278+
publicList<TxErc20>erc20Transfers(Stringaddress,longstartBlock)throwsApiException {
279+
returnerc20Transfers(address,startBlock,MAX_END_BLOCK);
280+
}
281+
282+
@NotNull
283+
@Override
284+
publicList<TxErc20>erc20Transfers(Stringaddress,longstartBlock,longendBlock)throwsApiException {
285+
returngetTokenTransfers(address,startBlock,endBlock,ACT_TX_TOKEN_ACTION,TxErc20ResponseTO.class);
286+
}
287+
288+
@NotNull
289+
@Override
290+
publicList<TxErc721>erc721Transfers(Stringaddress)throwsApiException {
291+
returnerc721Transfers(address,MIN_START_BLOCK);
292+
}
293+
294+
@NotNull
295+
@Override
296+
publicList<TxErc721>erc721Transfers(Stringaddress,longstartBlock)throwsApiException {
297+
returnerc721Transfers(address,startBlock,MAX_END_BLOCK);
298+
}
299+
300+
@NotNull
301+
@Override
302+
publicList<TxErc721>erc721Transfers(Stringaddress,longstartBlock,longendBlock)throwsApiException {
303+
returngetTokenTransfers(address,startBlock,endBlock,ACT_TX_NFT_TOKEN_ACTION,TxErc721ResponseTO.class);
304+
}
305+
306+
@NotNull
307+
@Override
308+
publicList<TxErc1155>erc1155Transfers(Stringaddress)throwsApiException {
309+
returnerc1155Transfers(address,MIN_START_BLOCK);
310+
}
311+
312+
@NotNull
313+
@Override
314+
publicList<TxErc1155>erc1155Transfers(Stringaddress,longstartBlock)throwsApiException {
315+
returnerc1155Transfers(address,startBlock,MAX_END_BLOCK);
316+
}
317+
318+
@NotNull
319+
@Override
320+
publicList<TxErc1155>erc1155Transfers(Stringaddress,longstartBlock,longendBlock)throwsApiException {
321+
returngetTokenTransfers(address,startBlock,endBlock,ACT_TX_1155_TOKEN_ACTION,TxErc1155ResponseTO.class);
322+
}
323+
324+
@NotNull
325+
private <TextendsBaseTxToken,RextendsBaseListResponseTO<T>>List<T>getTokenTransfers(Stringaddress,longstartBlock,longendBlock,StringtokenAction,Class<R>responseTOClass)throwsApiException {
326+
BasicUtils.validateAddress(address);
327+
finalBlockParamblocks =BasicUtils.compensateBlocks(startBlock,endBlock);
328+
329+
finalStringoffsetParam =PAGE_PARAM +"%s" +OFFSET_PARAM +OFFSET_MAX;
330+
finalStringblockParam =START_BLOCK_PARAM +blocks.start() +END_BLOCK_PARAM +blocks.end();
331+
finalStringurlParams =tokenAction +offsetParam +ADDRESS_PARAM +address +blockParam +SORT_ASC_PARAM;
332+
333+
returngetRequestUsingOffset(urlParams,responseTOClass);
334+
}
268335
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
packageio.api.etherscan.model;
2+
3+
publicabstractclassBaseTxTokenextendsBaseTx {
4+
5+
privatelongnonce;
6+
privateStringblockHash;
7+
privateStringtokenName;
8+
privateStringtokenSymbol;
9+
privateinttransactionIndex;
10+
privatelonggasPrice;
11+
privatelongcumulativeGasUsed;
12+
privatelongconfirmations;
13+
14+
publiclonggetNonce() {
15+
returnnonce;
16+
}
17+
18+
publicStringgetBlockHash() {
19+
returnblockHash;
20+
}
21+
22+
publicStringgetTokenName() {
23+
returntokenName;
24+
}
25+
26+
publicStringgetTokenSymbol() {
27+
returntokenSymbol;
28+
}
29+
30+
publicintgetTransactionIndex() {
31+
returntransactionIndex;
32+
}
33+
34+
publiclonggetGasPrice() {
35+
returngasPrice;
36+
}
37+
38+
publiclonggetCumulativeGasUsed() {
39+
returncumulativeGasUsed;
40+
}
41+
42+
publiclonggetConfirmations() {
43+
returnconfirmations;
44+
}
45+
46+
@Override
47+
publicStringtoString() {
48+
return"BaseTxToken{" +
49+
"nonce=" +nonce +
50+
", blockHash='" +blockHash +'\'' +
51+
", tokenName='" +tokenName +'\'' +
52+
", tokenSymbol='" +tokenSymbol +'\'' +
53+
", transactionIndex=" +transactionIndex +
54+
", gasPrice=" +gasPrice +
55+
", cumulativeGasUsed=" +cumulativeGasUsed +
56+
", confirmations=" +confirmations +
57+
'}' +super.toString();
58+
}
59+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
packageio.api.etherscan.model;
2+
3+
importjava.math.BigInteger;
4+
5+
publicclassTxErc1155extendsBaseTxToken {
6+
7+
privateBigIntegertokenID;
8+
privateBigIntegertokenValue;
9+
10+
publicBigIntegergetTokenID() {
11+
returntokenID;
12+
}
13+
14+
publicBigIntegergetTokenValue() {
15+
returntokenValue;
16+
}
17+
18+
@Override
19+
publicStringtoString() {
20+
return"TxErc1155{" +
21+
"tokenID=" +tokenID +
22+
", tokenValue=" +tokenValue +
23+
'}' +super.toString();
24+
}
25+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
packageio.api.etherscan.model;
2+
3+
importjava.math.BigInteger;
4+
5+
publicclassTxErc20extendsBaseTxToken {
6+
7+
privateBigIntegertokenDecimal;
8+
9+
publicBigIntegergetTokenDecimal() {
10+
returntokenDecimal;
11+
}
12+
13+
@Override
14+
publicStringtoString() {
15+
return"TxErc20{" +
16+
"tokenDecimal=" +tokenDecimal +
17+
'}' +super.toString();
18+
}
19+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
packageio.api.etherscan.model;
2+
3+
importjava.math.BigInteger;
4+
5+
publicclassTxErc721extendsBaseTxToken {
6+
7+
privateBigIntegertokenID;
8+
privateBigIntegertokenDecimal;
9+
10+
publicBigIntegergetTokenID() {
11+
returntokenID;
12+
}
13+
14+
publicBigIntegergetTokenDecimal() {
15+
returntokenDecimal;
16+
}
17+
18+
@Override
19+
publicStringtoString() {
20+
return"TxErc721{" +
21+
"tokenID=" +tokenID +
22+
", tokenDecimal=" +tokenDecimal +
23+
'}' +super.toString();
24+
}
25+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
packageio.api.etherscan.model.utility;
2+
3+
importio.api.etherscan.model.TxErc1155;
4+
5+
publicclassTxErc1155ResponseTOextendsBaseListResponseTO<TxErc1155> {
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
packageio.api.etherscan.model.utility;
2+
3+
importio.api.etherscan.model.TxErc20;
4+
5+
publicclassTxErc20ResponseTOextendsBaseListResponseTO<TxErc20> {
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
packageio.api.etherscan.model.utility;
2+
3+
importio.api.etherscan.model.TxErc721;
4+
5+
publicclassTxErc721ResponseTOextendsBaseListResponseTO<TxErc721> {
6+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
packageio.api.etherscan.account;
2+
3+
importio.api.ApiRunner;
4+
importio.api.etherscan.error.InvalidAddressException;
5+
importio.api.etherscan.model.TxErc1155;
6+
importorg.jetbrains.annotations.NotNull;
7+
importorg.junit.Test;
8+
9+
importjava.util.List;
10+
11+
publicclassAccountErc1155TransferTestextendsApiRunner {
12+
13+
@Test
14+
publicvoidcorrect() {
15+
List<TxErc1155>txs =getApi().account().erc1155Transfers("0xE4C8324534C0C6bCA174Cd0F02fAC9889C36bA59");
16+
assertNotNull(txs);
17+
assertFalse(txs.isEmpty());
18+
assertTxs(txs);
19+
assertNotEquals(0,txs.get(0).getGasPrice());
20+
assertNotEquals(-1,txs.get(0).getNonce());
21+
22+
assertNotNull(txs.get(0).toString());
23+
assertNotEquals(txs.get(0).toString(),txs.get(1).toString());
24+
25+
assertNotEquals(txs.get(0),txs.get(1));
26+
assertNotEquals(txs.get(0).hashCode(),txs.get(1).hashCode());
27+
28+
assertEquals(txs.get(1),txs.get(1));
29+
assertEquals(txs.get(1).hashCode(),txs.get(1).hashCode());
30+
}
31+
32+
@Test
33+
publicvoidcorrectStartBlock() {
34+
List<TxErc1155>txs =getApi().account().erc1155Transfers("0xE4C8324534C0C6bCA174Cd0F02fAC9889C36bA59",14275897);
35+
assertNotNull(txs);
36+
assertFalse(txs.isEmpty());
37+
assertTxs(txs);
38+
}
39+
40+
@Test
41+
publicvoidcorrectStartBlockEndBlock() {
42+
List<TxErc1155>txs =getApi().account().erc1155Transfers("0xE4C8324534C0C6bCA174Cd0F02fAC9889C36bA59",14275897,15148929);
43+
assertNotNull(txs);
44+
assertEquals(11,txs.size());
45+
assertTxs(txs);
46+
}
47+
48+
@Test(expected =InvalidAddressException.class)
49+
publicvoidinvalidParamWithError() {
50+
getApi().account().erc1155Transfers("0x6ec53A8fBa6358d59B3C4476D82cc60A2B0FaD7");
51+
}
52+
53+
@Test
54+
publicvoidcorrectParamWithEmptyExpectedResult() {
55+
List<TxErc1155>txs =getApi().account().erc1155Transfers("0x31ec53A8fBa6358d59B3C4476D82cc60A2B0FaD7");
56+
assertNotNull(txs);
57+
assertTrue(txs.isEmpty());
58+
}
59+
60+
privatevoidassertTxs(List<TxErc1155>txs) {
61+
txs.forEach(this::asserTx);
62+
}
63+
64+
privatevoidasserTx(@NotNullTxErc1155tx) {
65+
assertNotNull(tx.getBlockHash());
66+
assertNotNull(tx.getTokenName());
67+
assertNotNull(tx.getTokenSymbol());
68+
assertNotNull(tx.getFrom());
69+
assertNotNull(tx.getTo());
70+
assertNotNull(tx.getTimeStamp());
71+
assertNotNull(tx.getTokenID());
72+
assertNotNull(tx.getTokenValue());
73+
assertNotEquals(-1, (tx.getConfirmations()));
74+
assertNotNull(tx.getGasUsed());
75+
assertNotEquals(-1,tx.getCumulativeGasUsed());
76+
assertNotEquals(-1,tx.getTransactionIndex());
77+
}
78+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp