Skip to content

Commit b9916dc

Browse files
authored
Cranker: Fix the error InvalidAccountData (#29)
* fix: update * fix: remove base64 * fix: error of Dockerfile * fix: unhealthy error
1 parent 4e3247e commit b9916dc

File tree

6 files changed

+61
-41
lines changed

6 files changed

+61
-41
lines changed

.github/workflows/build-container-images.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ jobs:
4646
uses: docker/build-push-action@v5
4747
with:
4848
context: .
49-
file: ./cranker.Dockerfile
49+
file: ./cranker/Dockerfile
5050
platforms: linux/amd64
5151
push: true
5252
tags: ${{ steps.meta.outputs.tags }}

cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ version = "0.1.0"
55
edition = "2021"
66

77
[[bin]]
8-
name = "spl-stake-pool-interceptor"
8+
name = "stake-deposit-interceptor-cli"
99
path = "src/main.rs"
1010

1111
[dependencies]

cranker.Dockerfile

Lines changed: 0 additions & 23 deletions
This file was deleted.

cranker/Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM rust:1.81 AS builder
2+
RUN apt-get update && apt-get install -y libudev-dev libclang-dev clang pkg-config libssl-dev build-essential cmake protobuf-compiler
3+
RUN update-ca-certificates
4+
WORKDIR /usr/src/app
5+
COPY . .
6+
RUN --mount=type=cache,mode=0777,target=/home/root/app/target \
7+
--mount=type=cache,mode=0777,target=/usr/local/cargo/registry \
8+
cargo build --release --bin stake-deposit-interceptor-cranker
9+
10+
#########
11+
FROM ubuntu:22.04 as runtime
12+
RUN apt-get update && apt-get install -y ca-certificates procps
13+
ENV APP="stake-deposit-interceptor-cranker"
14+
COPY --from=builder /usr/src/app/target/release/$APP ./$APP
15+
ENTRYPOINT ./$APP

cranker/src/lib.rs

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -115,21 +115,21 @@ impl InterceptorCranker {
115115

116116
info!(
117117
"Receipt {} raw bytes:\n\
118-
Interpreted values:\n\
119-
deposit_time: {}\n\
120-
cool_down: {}\n\
121-
current_time: {}",
118+
Interpreted values:\n\
119+
deposit_time: {}\n\
120+
cool_down: {}\n\
121+
current_time: {}",
122122
receipt.base, deposit_time, cool_down, now
123123
);
124124
emit_deposit_receipt(&receipt, &self.cluster_name);
125125

126126
if deposit_time > now {
127127
info!(
128-
"Receipt {} not yet expired (future deposit time). Current time: {}, Deposit time: {}",
129-
receipt.base,
130-
now,
131-
deposit_time
132-
);
128+
"Receipt {} not yet expired (future deposit time). Current time: {}, Deposit time: {}",
129+
receipt.base,
130+
now,
131+
deposit_time
132+
);
133133
future_deposits += 1;
134134
continue;
135135
}
@@ -171,11 +171,11 @@ impl InterceptorCranker {
171171
}
172172
None => {
173173
emit_error(format!(
174-
"Receipt {} has invalid timing values - would overflow. Deposit time: {}, Cool down: {}",
175-
receipt.base,
176-
deposit_time,
177-
cool_down
178-
), &self.cluster_name);
174+
"Receipt {} has invalid timing values - would overflow. Deposit time: {}, Cool down: {}",
175+
receipt.base,
176+
deposit_time,
177+
cool_down
178+
), &self.cluster_name);
179179
}
180180
}
181181
}
@@ -263,6 +263,35 @@ impl InterceptorCranker {
263263
let owner_ata =
264264
get_associated_token_address(&receipt.owner, &stake_pool_deposit_authority.pool_mint);
265265

266+
// Check if account exists
267+
match self.rpc_client.get_account(&owner_ata).await {
268+
Ok(_) => {
269+
info!("Owner token account exists: {owner_ata}");
270+
}
271+
Err(_) => {
272+
info!("Creating owner token account: {owner_ata}");
273+
let create_ata_ix = create_associated_token_account(
274+
&self.payer.pubkey(),
275+
&receipt.owner,
276+
&stake_pool_deposit_authority.pool_mint,
277+
&spl_token::id(),
278+
);
279+
280+
let recent_blockhash = self.rpc_client.get_latest_blockhash().await?;
281+
let create_ata_tx = Transaction::new_signed_with_payer(
282+
&[create_ata_ix],
283+
Some(&self.payer.pubkey()),
284+
&[self.payer.as_ref()],
285+
recent_blockhash,
286+
);
287+
288+
self.rpc_client
289+
.send_and_confirm_transaction(&create_ata_tx)
290+
.await?;
291+
info!("Created owner ata token account");
292+
}
293+
}
294+
266295
let fee_wallet_token_account = get_associated_token_address(
267296
&stake_pool_deposit_authority.fee_wallet,
268297
&stake_pool_deposit_authority.pool_mint,

docker-compose.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
services:
22
interceptor-cranker:
33
build:
4-
dockerfile: ./cranker.Dockerfile
4+
dockerfile: ./cranker/Dockerfile
55
environment:
66
- RPC_URL=${RPC_URL:-https://api.devnet.solana.com}
7-
- WS_URL=${WS_URL:-wss://api.devnet.solana.com}
87
- KEYPAIR_PATH=${KEYPAIR_PATH}
98
- PROGRAM_ID=${PROGRAM_ID:-5TAiuAh3YGDbwjEruC1ZpXTJWdNDS7Ur7VeqNNiHMmGV}
109
- INTERVAL_SECONDS=${INTERVAL_SECONDS:-60}

0 commit comments

Comments
 (0)