Skip to content

Commit 70dcfc3

Browse files
authored
Refactor token balance query (#229)
* Refactor token balance query. * Update dependency.
1 parent ccf6d96 commit 70dcfc3

File tree

7 files changed

+95
-11
lines changed

7 files changed

+95
-11
lines changed

.github/workflows/integration-test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,5 @@ jobs:
126126
cd ./examples/js/
127127
npx ts-node get_l2_block_by_id.ts
128128
npx ts-node get_token_balance.ts
129+
npx ts-node rest_get_token_balance.ts
129130
npx ts-node rest_get_l2_blocks.ts

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/js/get_token_balance.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ async function mainTest() {
4242
await sleep(1000);
4343
await kafkaProducer.Stop();
4444

45-
await getTokenBalanceTest();
45+
await testGetTokenBalanceByTokenId();
46+
await testGetTokenBalanceByTokenName();
47+
4648
await getL2BlockTest();
4749
}
4850

@@ -64,14 +66,26 @@ async function depositBalance() {
6466
]);
6567
}
6668

67-
async function getTokenBalanceTest() {
68-
// const res = await grpcClient.tokenBalanceQuery(userId, tokenId, "", "");
69-
const res = await grpcClient.tokenBalanceQuery(userId, 999, "", "ETH"); // test ignoring token_id by providing token_name
69+
async function testGetTokenBalanceByTokenId() {
70+
console.log("testGetTokenBalanceByTokenId Begin");
71+
72+
const res = await grpcClient.tokenBalanceQuery(userId, tokenId, null, null);
73+
assert.equal(res["balance"], "3.0000");
74+
assert.equal(res["balance_raw"], "30000");
75+
assert.equal(res["precision"], 4);
76+
77+
console.log("testGetTokenBalanceByTokenId End");
78+
}
79+
80+
async function testGetTokenBalanceByTokenName() {
81+
console.log("testGetTokenBalanceByTokenName Begin");
82+
83+
const res = await grpcClient.tokenBalanceQuery(userId, null, null, "ETH");
7084
assert.equal(res["balance"], "3.0000");
7185
assert.equal(res["balance_raw"], "30000");
7286
assert.equal(res["precision"], 4);
7387

74-
console.log("getTokenBalanceTest passed");
88+
console.log("testGetTokenBalanceByTokenName End");
7589
}
7690

7791
async function getL2BlockTest() {

examples/js/rest_client.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,24 @@ class Client {
2222
throw new Error(`request failed with ${resp.status} ${resp.statusText}`);
2323
}
2424
}
25+
26+
async tokenBalanceQuery(accountId, tokenId, tokenAddress, tokenName) {
27+
let params = null;
28+
if (tokenId != null) {
29+
params = `token_id=${tokenId}`;
30+
} else if (tokenAddress != null) {
31+
params = `token_address=${tokenAddress}`;
32+
} else if (tokenName != null) {
33+
params = `token_name=${tokenName}`;
34+
}
35+
36+
let resp = await this.client.get(`/token_balance/${accountId}?${params}`);
37+
if (resp.status === 200) {
38+
return resp.data;
39+
} else {
40+
throw new Error(`request failed with ${resp.status} ${resp.statusText}`);
41+
}
42+
}
2543
}
2644

2745
let restClient = new Client();

examples/js/rest_get_token_balance.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// This test must be run after `get_token_balance.ts`. Since the test cases use
2+
// the previous build Kafka data.
3+
4+
import { restClient } from "./rest_client";
5+
import { strict as assert } from "assert";
6+
7+
const tokenId = 0;
8+
const userId = 3;
9+
10+
async function main() {
11+
try {
12+
await mainTest();
13+
} catch (error) {
14+
console.error("Caught error:", error);
15+
process.exit(1);
16+
}
17+
}
18+
19+
async function mainTest() {
20+
await testGetTokenBalanceByTokenId();
21+
await testGetTokenBalanceByTokenName();
22+
}
23+
24+
async function testGetTokenBalanceByTokenId() {
25+
console.log("testGetTokenBalanceByTokenId Begin");
26+
27+
const res = await restClient.tokenBalanceQuery(userId, tokenId, null, null);
28+
assert.equal(res["balance"], "3.0000");
29+
assert.equal(res["balance_raw"], "30000");
30+
assert.equal(res["precision"], 4);
31+
32+
console.log("testGetTokenBalanceByTokenId End");
33+
}
34+
35+
async function testGetTokenBalanceByTokenName() {
36+
console.log("testGetTokenBalanceByTokenName Begin");
37+
38+
const res = await restClient.tokenBalanceQuery(userId, null, null, "ETH");
39+
assert.equal(res["balance"], "3.0000");
40+
assert.equal(res["balance_raw"], "30000");
41+
assert.equal(res["precision"], 4);
42+
43+
console.log("testGetTokenBalanceByTokenName End");
44+
}
45+
46+
main();

src/grpc/controller.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,17 @@ impl Controller {
194194
}
195195

196196
pub fn token_balance_query(&self, request: TokenBalanceQueryRequest) -> Result<TokenBalanceQueryResponse, Status> {
197-
let token_id = if !request.token_address.is_empty() {
197+
let token_id = if let Some(token_id) = request.token_id {
198+
token_id
199+
} else if let Some(_token_address) = request.token_address {
198200
unimplemented!()
199-
} else if !request.token_name.is_empty() {
200-
get_token_id_by_name(&request.token_name)
201+
} else if let Some(token_name) = request.token_name {
202+
get_token_id_by_name(&token_name)
201203
} else {
202-
request.token_id
204+
return Err(Status::new(
205+
Code::InvalidArgument,
206+
"Must specify one of token_id, token_address or token_name",
207+
));
203208
};
204209

205210
let balance = self.state.read().unwrap().get_token_balance(request.account_id, token_id);

0 commit comments

Comments
 (0)