Skip to content

Commit 111b287

Browse files
committed
fix: alter 'getBlob' and 'Blob' subscribers value
1 parent 1ce4f72 commit 111b287

File tree

5 files changed

+44
-69
lines changed

5 files changed

+44
-69
lines changed

README.md

+4-17
Original file line numberDiff line numberDiff line change
@@ -1056,13 +1056,13 @@ This will emit an `OverwriteBlob` event and overwrite the blob in the network.
10561056
##### Get a blob
10571057

10581058
```sh
1059-
cast abi-decode "getBlob(string)((uint64,string,(address,(string,(uint64,uint64,string,address,bool))[])[],uint8))" $(cast call --rpc-url $ETH_RPC_URL $BLOBS "getBlob(string)" "rzghyg4z3p6vbz5jkgc75lk64fci7kieul65o6hk6xznx7lctkmq")
1059+
cast abi-decode "getBlob(string)((uint64,string,(string,uint64)[],uint8))" $(cast call --rpc-url $ETH_RPC_URL $BLOBS "getBlob(string)" "rzghyg4z3p6vbz5jkgc75lk64fci7kieul65o6hk6xznx7lctkmq")
10601060
```
10611061

10621062
This will return the following response:
10631063

10641064
```sh
1065-
(6, "utiakbxaag7udhsriu6dm64cgr7bk4zahiudaaiwuk6rfv43r3rq", [(0x90F79bf6EB2c4f870365E785982E1f101E93b906, [("foo", (4825, 91225 [9.122e4], "cydkrslhbj4soqppzc66u6lzwxgjwgbhdlxmyeahytzqrh65qtjq", 0x0000000000000000000000000000000000000000, false))])], 2)
1065+
6, "utiakbxaag7udhsriu6dm64cgr7bk4zahiudaaiwuk6rfv43r3rq", [("1bce5a746a1134bf082baac80be951906bb406787e14c9fee0d7d8db0fc0b7f4", 98266 [9.826e4])], 2)
10661066
```
10671067

10681068
Which maps to the `Blob` struct:
@@ -1076,21 +1076,8 @@ struct Blob {
10761076
}
10771077
10781078
struct Subscriber {
1079-
address subscriber; // 0x90F79bf6EB2c4f870365E785982E1f101E93b906
1080-
SubscriptionGroup[] subscriptionGroup; // See `SubscriptionGroup` struct below
1081-
}
1082-
1083-
struct SubscriptionGroup {
1084-
string subscriptionId; // "foo"
1085-
Subscription subscription; // See `Subscription` struct below
1086-
}
1087-
1088-
struct Subscription {
1089-
uint64 added; // 4825
1090-
uint64 expiry; // 91225
1091-
string source; // "cydkrslhbj4soqppzc66u6lzwxgjwgbhdlxmyeahytzqrh65qtjq"
1092-
address delegate; // 0x0000000000000000000000000000000000000000
1093-
bool failed; // false
1079+
string subscriptionId; // "1bce5a746a1134bf082baac80be951906bb406787e14c9fee0d7d8db0fc0b7f4"
1080+
uint64 expiry; // 98266
10941081
}
10951082
```
10961083

src/types/BlobTypes.sol

+6-6
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,8 @@ struct AddBlobParams {
156156
/// @dev Blob information and status.
157157
/// @param size (uint64): The size of the blob content in bytes.
158158
/// @param metadataHash (string): Blob metadata hash that contains information for block recovery.
159-
/// @param subscribers (bytes): Active subscribers (accounts) that are paying for the blob, encoded as HashMap<Address,
160-
/// SubscriptionGroup>.
159+
/// @param subscribers (bytes): Active subscribers (accounts) that are paying for the blob, encoded as
160+
/// a `HashMap<SubscriptionId, ChainEpoch>`.
161161
/// @param status (bytes): Current status of the blob.
162162
struct Blob {
163163
uint64 size;
@@ -179,11 +179,11 @@ enum BlobStatus {
179179
}
180180

181181
/// @dev A subscriber and their subscription groups.
182-
/// @param subscriber (address): The subscriber address.
183-
/// @param subscriptionGroup (SubscriptionGroup[]): The subscription groups. See {SubscriptionGroup} for more details.
182+
/// @param subscriptionId (string): The subscription ID.
183+
/// @param expiry (uint64): The block number when the subscription will expire.
184184
struct Subscriber {
185-
address subscriber;
186-
SubscriptionGroup[] subscriptionGroup;
185+
string subscriptionId;
186+
uint64 expiry;
187187
}
188188

189189
/// @dev Pending subscription information.

src/wrappers/LibBlob.sol

+2-3
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,8 @@ library LibBlob {
176176
bytes[2][] memory decoded = data.decodeCborMappingToBytes();
177177
subscribers = new Subscriber[](decoded.length);
178178
for (uint256 i = 0; i < decoded.length; i++) {
179-
// The `subscriber` value is an ID address string, like `f0123`, so we convert it to an address
180-
subscribers[i].subscriber = decoded[i][0].decodeCborActorIdStringToAddress();
181-
subscribers[i].subscriptionGroup = decodeSubscriptionGroup(decoded[i][1]);
179+
subscribers[i].subscriptionId = decodeSubscriptionId(decoded[i][0]);
180+
subscribers[i].expiry = decoded[i][1].decodeCborBytesToUint64();
182181
}
183182
}
184183

test/LibBlob.t.sol

+23-33
Original file line numberDiff line numberDiff line change
@@ -171,45 +171,33 @@ contract LibBlobTest is Test {
171171
function testDecodeSubscribers() public view {
172172
// One subscriber
173173
bytes memory data =
174-
hex"a1656630313234a17840343564616464393261326161373431383133323638376639613432313439306261643963356161643332656134653937623135356533373739316630306435308519021f1a0001539f982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f4";
174+
hex"a1a165696e6e65727840393763323930343836383633336164376232353337646534623035336338356333396262306165306263313631383965316261633738373165613065656633371a00016fb4";
175175
Subscriber[] memory subscribers = LibBlob.decodeSubscribers(data);
176176
// Note: tests will always show this as a masked ID address, but in reality, it's a looked up delegated address
177-
assertEq(subscribers[0].subscriber, 0xFf0000000000000000000000000000000000007C);
178-
assertEq(
179-
subscribers[0].subscriptionGroup[0].subscriptionId,
180-
"45dadd92a2aa7418132687f9a421490bad9c5aad32ea4e97b155e37791f00d50"
181-
);
182-
assertEq(subscribers[0].subscriptionGroup[0].subscription.added, 543);
183-
assertEq(subscribers[0].subscriptionGroup[0].subscription.expiry, 86943);
184-
assertEq(
185-
subscribers[0].subscriptionGroup[0].subscription.source,
186-
"7w5xcwyiqueejij6fo2zqaoluybl6ozvcfzaj67ug2aqcg7psq4q"
187-
);
188-
assertEq(subscribers[0].subscriptionGroup[0].subscription.delegate, address(0));
189-
assertEq(subscribers[0].subscriptionGroup[0].subscription.failed, false);
177+
assertEq(subscribers[0].subscriptionId, "97c2904868633ad7b2537de4b053c85c39bb0ae0bc16189e1bac7871ea0eef37");
178+
assertEq(subscribers[0].expiry, 94132);
190179

191-
// Two subscription groups
180+
// Two subscribers (i.e., same blob, different buckets)
192181
data =
193-
hex"a1656630313234a2784034316664336363386562303731323262663165356564383562306236393237666236663162336630643662313331326261366531396437646536386366373833851908eb1a00015a6b982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f47840343564616464393261326161373431383133323638376639613432313439306261643963356161643332656134653937623135356533373739316630306435308519021f1a0001539f982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f4";
182+
hex"a2a165696e6e65727840353764303161653032386136636131303937653630346137633065363863303433353135663437386162636334626165663763386638353137343133343736651a00017f0fa165696e6e65727840613465343463326138303638313061613737353163376632373834633030376131623636326666333130383936363863613362346634653862326330633963631a00017f42";
194183
subscribers = LibBlob.decodeSubscribers(data);
195184
// Note: tests will always show this as a masked ID address, but in reality, it's a looked up delegated address
196-
assertEq(subscribers[0].subscriber, 0xFf0000000000000000000000000000000000007C);
197-
assertEq(
198-
subscribers[0].subscriptionGroup[0].subscriptionId,
199-
"41fd3cc8eb07122bf1e5ed85b0b6927fb6f1b3f0d6b1312ba6e19d7de68cf783"
200-
);
201-
assertEq(
202-
subscribers[0].subscriptionGroup[1].subscriptionId,
203-
"45dadd92a2aa7418132687f9a421490bad9c5aad32ea4e97b155e37791f00d50"
204-
);
185+
assertEq(subscribers[0].subscriptionId, "57d01ae028a6ca1097e604a7c0e68c043515f478abcc4baef7c8f8517413476e");
186+
assertEq(subscribers[0].expiry, 98063);
187+
assertEq(subscribers[1].subscriptionId, "a4e44c2a806810aa7751c7f2784c007a1b662ff31089668ca3b4f4e8b2c0c9cc");
188+
assertEq(subscribers[1].expiry, 98114);
205189

206-
// // Two different subscribers
190+
// Three different subscribers (different account and buckets), same blob
207191
data =
208-
hex"a2656630313234a2784034316664336363386562303731323262663165356564383562306236393237666236663162336630643662313331326261366531396437646536386366373833851908eb1a00015a6b982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f47840343564616464393261326161373431383133323638376639613432313439306261643963356161643332656134653937623135356533373739316630306435308519021f1a0001539f982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f4656630313236a1784033333566316434636333343130646136363562613133336136616339653666656536626334653861356435643239336262333966396465313266303530326438851909881a00015b08982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f4";
192+
hex"a3a165696e6e65727840316263653561373436613131333462663038326261616338306265393531393036626234303637383765313463396665653064376438646230666330623766341a00017fdaa165696e6e65727840353764303161653032386136636131303937653630346137633065363863303433353135663437386162636334626165663763386638353137343133343736651a00017f0fa165696e6e65727840613465343463326138303638313061613737353163376632373834633030376131623636326666333130383936363863613362346634653862326330633963631a00017f42";
209193
subscribers = LibBlob.decodeSubscribers(data);
210-
// Note: tests will always show this as a masked ID address, but in reality, it's a looked up delegated address
211-
assertEq(subscribers[0].subscriber, 0xFf0000000000000000000000000000000000007C);
212-
assertEq(subscribers[1].subscriber, 0xFF0000000000000000000000000000000000007e);
194+
// Note: tests will always show this as a masked ID address, but in reality, it's a looked up delegated
195+
assertEq(subscribers[0].subscriptionId, "1bce5a746a1134bf082baac80be951906bb406787e14c9fee0d7d8db0fc0b7f4");
196+
assertEq(subscribers[0].expiry, 98266);
197+
assertEq(subscribers[1].subscriptionId, "57d01ae028a6ca1097e604a7c0e68c043515f478abcc4baef7c8f8517413476e");
198+
assertEq(subscribers[1].expiry, 98063);
199+
assertEq(subscribers[2].subscriptionId, "a4e44c2a806810aa7751c7f2784c007a1b662ff31089668ca3b4f4e8b2c0c9cc");
200+
assertEq(subscribers[2].expiry, 98114);
213201
}
214202

215203
function testDecodeSubscriptionGroup() public view {
@@ -262,11 +250,13 @@ contract LibBlobTest is Test {
262250

263251
function testDecodeBlob() public view {
264252
bytes memory data =
265-
hex"84069820185818300918d918fc011819188d18b0150818dc186b18c918e618f10a185c18ef189118a3185d1864186d187318a518b718a8181918cd18b0184da1656630313234a17840343564616464393261326161373431383133323638376639613432313439306261643963356161643332656134653937623135356533373739316630306435308519021f1a0001539f982018fd18bb1871185b08188508184418a1183e182b18b518980118cb18a60218bf183b18351118720418fb18f41836188101181b18ef18941839f6f4685265736f6c766564";
253+
hex"84069820182617188e181e18451847188b18b918f1184a181918e318b4188b051849182e18de188918ca18ea1874189f18e3185618a9185b18c9188c171884182fa3a165696e6e65727840316263653561373436613131333462663038326261616338306265393531393036626234303637383765313463396665653064376438646230666330623766341a00017fdaa165696e6e65727840353764303161653032386136636131303937653630346137633065363863303433353135663437386162636334626165663763386638353137343133343736651a00017f0fa165696e6e65727840613465343463326138303638313061613737353163376632373834633030376131623636326666333130383936363863613362346634653862326330633963631a00017f42685265736f6c766564";
266254
Blob memory blob = LibBlob.decodeBlob(data);
267255
assertEq(blob.size, 6);
268-
assertEq(blob.metadataHash, "layatwp4aemy3mavbdogxspg6effz34runowi3ltuw32qgonwbgq");
269-
assertEq(blob.subscribers.length, 1);
256+
assertEq(blob.metadataHash, "eyly4hsfi6f3t4kkdhr3jcyfjexn5cok5j2j7y2wvfn4tdaxqqxq");
257+
assertEq(blob.subscribers.length, 3);
258+
assertEq(blob.subscribers[0].subscriptionId, "1bce5a746a1134bf082baac80be951906bb406787e14c9fee0d7d8db0fc0b7f4");
259+
assertEq(blob.subscribers[0].expiry, 98266);
270260
assertEq(uint8(blob.status), uint8(BlobStatus.Resolved));
271261
}
272262

test/scripts/wrapper_integration_test.sh

+9-10
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,15 @@ fi
6060
echo "Output: $output"
6161

6262
# Test getBlob
63-
# TODO: fix `getBlob` and the subscribers field in the blob struct
64-
# echo
65-
# echo "Testing getBlob..."
66-
# output=$(cast call --rpc-url $ETH_RPC_URL $BLOBS "getBlob(string)" "$BLOB_HASH")
67-
# if [ "$output" = "0x" ]; then
68-
# echo "getBlob failed"
69-
# exit 1
70-
# fi
71-
# DECODED_BLOB=$(cast abi-decode "getBlob(string)((uint64,string,(address,(string,(uint64,uint64,string,address,bool))[])[],uint8))" $output)
72-
# echo "Output: $DECODED_BLOB"
63+
echo
64+
echo "Testing getBlob..."
65+
output=$(cast call --rpc-url $ETH_RPC_URL $BLOBS "getBlob(string)" "$BLOB_HASH")
66+
if [ "$output" = "0x" ]; then
67+
echo "getBlob failed"
68+
exit 1
69+
fi
70+
DECODED_BLOB=$(cast abi-decode "getBlob(string)((uint64,string,(string,uint64)[],uint8))" $output)
71+
echo "Output: $DECODED_BLOB"
7372

7473
# Test getBlobStatus
7574
echo

0 commit comments

Comments
 (0)