[pr] Serialize structs for svm-rollup module#4
Conversation
Yiwen-Gao
left a comment
There was a problem hiding this comment.
There are some structs that we also duplicate in svm-rollup and apply serialization macros to. Do you have a system for which structs get modified in our Agave fork VS which are duplicated in svm-rollup?
For FeatureSetWrapper in SvmPrevConfig, we can use just FeatureSet and serialize it in agave now. Walter made that wrapper because we tried to not change Agave's code that time. About FeeRateGovernorWrapper, FeeRateGovernor has one field marked as serde-ignore that nullifies the value when the struct it cloned, and it is bad in our case when working with sovereign modules as they clone objects into sov-state. I do not really know what's the purpose of that serde-ignore therefore I created a Wrapper for that struct to be safe. |
|
Got it, thanks for explaining. It sounds like we're going to modify the types in Agave directly moving forward. Feel free to make a follow-up PR to remove those types from I agree that we should leave |
* Apply the retry code to the async pubsub client
Create a test server
```ts
import http from "http";
import { WebSocketServer } from "ws";
let attemptCount = 0;
const server = http.createServer();
const wss = new WebSocketServer({ noServer: true });
wss.on("connection", (ws) => {
ws.send("Connection accepted.");
ws.on("message", (msg) => console.log(`Received: ${msg}`));
});
server.on("upgrade", (req, socket, head) => {
attemptCount += 1;
if (attemptCount <= 4) {
socket.write("HTTP/1.1 429 Too Many Requests\r\n\r\n");
socket.destroy();
console.log(`Rejected connection #${attemptCount} (429)`);
return;
}
wss.handleUpgrade(req, socket, head, (ws) => {
wss.emit("connection", ws, req);
console.log("Connection accepted on attempt", attemptCount);
});
});
server.listen(8080, () => {
console.log("Server listening on port 8080");
});
```
Run `test_slot_subscription_async`:
```
Rejected connection #1 (429)
Rejected connection #2 (429)
Rejected connection #3 (429)
Rejected connection #4 (429)
Connection accepted on attempt 5
Received: {"id":1,"jsonrpc":"2.0","method":"slotSubscribe","params":[]}
```
* `s/async_with_retry/with_retry/`
Problem
Some structs have to be Serializable to be included in SVM module in svm-rollup repository
Summary of Changes
Serialized ComputeBudget, FeatureSet, FeeStructure and FeeBin (which is within FeeStructure)
Fixes #