-
Notifications
You must be signed in to change notification settings - Fork 87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[TASK] Investigate gas optimization: instantiate Attestation
with {}
notation
#918
Comments
Conducted some benchmarks on this and seems like As a comparison base I took this method that initiates linea-attestation-registry/contracts/src/stdlib/IndexerModuleV2.sol Lines 187 to 207 in e2e7f11
Here is a contract that I built for measuring gas usage // SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract AttestationGasTest {
struct Attestation {
bytes32 uid;
bytes32 schema;
uint64 time;
uint64 expirationTime;
uint64 revocationTime;
bytes32 refUID;
address recipient;
address attester;
bool revocable;
bytes data;
}
function _buildAttestationPositional(
bytes32 uid,
bytes32 schema,
uint64 time,
uint64 expirationTime,
uint64 revocationTime,
bytes32 refUID,
address recipient,
address attester,
bool revocable,
bytes memory data
) public pure returns (Attestation memory) {
return Attestation(
uid,
schema,
time,
expirationTime,
revocationTime,
refUID,
recipient,
attester,
revocable,
data
);
}
function _buildAttestationNamed(
bytes32 uid,
bytes32 schema,
uint64 time,
uint64 expirationTime,
uint64 revocationTime,
bytes32 refUID,
address recipient,
address attester,
bool revocable,
bytes memory data
) public pure returns (Attestation memory) {
return Attestation({
uid: uid,
schema: schema,
time: time,
expirationTime: expirationTime,
revocationTime: revocationTime,
refUID: refUID,
recipient: recipient,
attester: attester,
revocable: revocable,
data: data
});
}
uint256 constant N = 100;
function testGas_Positional() public pure {
bytes memory emptyData = "";
bytes32 dummyBytes = keccak256("test");
address dummyAddr = address(0x123);
for (uint256 i = 0; i < N; i++) {
_buildAttestationPositional(dummyBytes, dummyBytes, 1, 2, 3, dummyBytes, dummyAddr, dummyAddr, true, emptyData);
}
}
function testGas_Named() public pure {
bytes memory emptyData = "";
bytes32 dummyBytes = keccak256("test");
address dummyAddr = address(0x123);
for (uint256 i = 0; i < N; i++) {
_buildAttestationNamed(dummyBytes, dummyBytes, 1, 2, 3, dummyBytes, dummyAddr, dummyAddr, true, emptyData);
}
}
} As result positional argument approach took 71449 gas per 100 initiations, ![]() meantime ![]() @alainncls does this research make sense for you? |
Summary
It has been suggested that instantiating an
Attestation
struct using{}
notation could save gas. This ticket aims to validate this claim and, if confirmed, apply the optimization across the codebase.Objectives
Research & benchmark
Attestation
using{}
notation vs. standard assignment.Apply optimization (if confirmed)
Attestation
is instantiated to use{}
notation if it proves beneficial.Impact
The text was updated successfully, but these errors were encountered: