ソースを参照

feat(entropy): update requestV2 methods to return provider address

Co-Authored-By: Jayant <jayant@dourolabs.xyz>
Devin AI 5 ヶ月 前
コミット
3570576ce1

+ 35 - 18
target_chains/ethereum/contracts/contracts/entropy/Entropy.sol

@@ -287,26 +287,37 @@ abstract contract Entropy is IEntropy, EntropyState {
         external
         payable
         override
-        returns (uint64 assignedSequenceNumber)
+        returns (uint64 sequenceNumber, address providerAddress)
     {
-        assignedSequenceNumber = requestV2(getDefaultProvider(), random(), 0);
+        address provider = getDefaultProvider();
+        (sequenceNumber, ) = requestV2(provider, random(), 0);
+        providerAddress = provider;
     }
 
     function requestV2(
         uint32 gasLimit
-    ) external payable override returns (uint64 assignedSequenceNumber) {
-        assignedSequenceNumber = requestV2(
-            getDefaultProvider(),
-            random(),
-            gasLimit
-        );
+    )
+        external
+        payable
+        override
+        returns (uint64 sequenceNumber, address providerAddress)
+    {
+        address provider = getDefaultProvider();
+        (sequenceNumber, ) = requestV2(provider, random(), gasLimit);
+        providerAddress = provider;
     }
 
     function requestV2(
         address provider,
         uint32 gasLimit
-    ) external payable override returns (uint64 assignedSequenceNumber) {
-        assignedSequenceNumber = requestV2(provider, random(), gasLimit);
+    )
+        external
+        payable
+        override
+        returns (uint64 sequenceNumber, address providerAddress)
+    {
+        (sequenceNumber, ) = requestV2(provider, random(), gasLimit);
+        providerAddress = provider;
     }
 
     // As a user, request a random number from `provider`. Prior to calling this method, the user should
@@ -347,19 +358,24 @@ abstract contract Entropy is IEntropy, EntropyState {
         address provider,
         bytes32 userContribution
     ) public payable override returns (uint64) {
-        return
-            requestV2(
-                provider,
-                userContribution,
-                0 // Passing 0 will assign the request the provider's default gas limit
-            );
+        (uint64 sequenceNumber, ) = requestV2(
+            provider,
+            userContribution,
+            0 // Passing 0 will assign the request the provider's default gas limit
+        );
+        return sequenceNumber;
     }
 
     function requestV2(
         address provider,
         bytes32 userContribution,
         uint32 gasLimit
-    ) public payable override returns (uint64) {
+    )
+        public
+        payable
+        override
+        returns (uint64 sequenceNumber, address providerAddress)
+    {
         EntropyStructsV2.Request storage req = requestHelper(
             provider,
             constructUserCommitment(userContribution),
@@ -386,7 +402,8 @@ abstract contract Entropy is IEntropy, EntropyState {
             uint32(req.gasLimit10k) * TEN_THOUSAND,
             bytes("")
         );
-        return req.sequenceNumber;
+        sequenceNumber = req.sequenceNumber;
+        providerAddress = provider;
     }
 
     // This method validates the provided user's revelation and provider's revelation against the corresponding

+ 1 - 1
target_chains/ethereum/contracts/contracts/entropy/EntropyTester.sol

@@ -134,7 +134,7 @@ contract EntropyTester is IEntropyConsumer {
         address provider = getProviderWithDefault(entropy, _provider);
 
         uint128 fee = entropy.getFeeV2(provider, gasLimit);
-        sequenceNumber = entropy.requestV2{value: fee}(provider, gasLimit);
+        (sequenceNumber, ) = entropy.requestV2{value: fee}(provider, gasLimit);
 
         callbackData[
             callbackKey(address(entropy), provider, sequenceNumber)

+ 3 - 3
target_chains/ethereum/contracts/forge-test/Entropy.t.sol

@@ -1759,7 +1759,7 @@ contract EntropyTest is Test, EntropyTestUtils, EntropyEvents, EntropyEventsV2 {
             bytes("")
         );
         vm.prank(user1);
-        uint64 sequenceNumber = random.requestV2{value: fee}(
+        (uint64 sequenceNumber, ) = random.requestV2{value: fee}(
             provider1,
             userRandomNumber,
             gasLimit
@@ -1953,7 +1953,7 @@ contract EntropyConsumer is IEntropyConsumer {
         bytes32 randomNumber
     ) public payable returns (uint64 sequenceNumber) {
         address _provider = IEntropy(entropy).getDefaultProvider();
-        sequenceNumber = IEntropy(entropy).requestV2{value: msg.value}(
+        (sequenceNumber, ) = IEntropy(entropy).requestV2{value: msg.value}(
             _provider,
             randomNumber,
             0
@@ -1965,7 +1965,7 @@ contract EntropyConsumer is IEntropyConsumer {
         uint32 gasLimit
     ) public payable returns (uint64 sequenceNumber) {
         address _provider = IEntropy(entropy).getDefaultProvider();
-        sequenceNumber = IEntropy(entropy).requestV2{value: msg.value}(
+        (sequenceNumber, ) = IEntropy(entropy).requestV2{value: msg.value}(
             _provider,
             randomNumber,
             gasLimit

+ 12 - 8
target_chains/ethereum/entropy_sdk/solidity/IEntropyV2.sol

@@ -7,7 +7,8 @@ import "./EntropyStructsV2.sol";
 
 interface IEntropyV2 is EntropyEventsV2 {
     /// @notice Request a random number using the default provider with default gas limit
-    /// @return assignedSequenceNumber A unique identifier for this request
+    /// @return sequenceNumber A unique identifier for this request
+    /// @return providerAddress The address of the provider that handled the request
     /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
     /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
     /// the generated random number.
@@ -28,11 +29,12 @@ interface IEntropyV2 is EntropyEventsV2 {
     function requestV2()
         external
         payable
-        returns (uint64 assignedSequenceNumber);
+        returns (uint64 sequenceNumber, address providerAddress);
 
     /// @notice Request a random number using the default provider with specified gas limit
     /// @param gasLimit The gas limit for the callback function.
-    /// @return assignedSequenceNumber A unique identifier for this request
+    /// @return sequenceNumber A unique identifier for this request
+    /// @return providerAddress The address of the provider that handled the request
     /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
     /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
     /// the generated random number.
@@ -52,12 +54,13 @@ interface IEntropyV2 is EntropyEventsV2 {
     /// call a variant of `requestV2` that accepts a `userRandomNumber` parameter.
     function requestV2(
         uint32 gasLimit
-    ) external payable returns (uint64 assignedSequenceNumber);
+    ) external payable returns (uint64 sequenceNumber, address providerAddress);
 
     /// @notice Request a random number from a specific provider with specified gas limit
     /// @param provider The address of the provider to request from
     /// @param gasLimit The gas limit for the callback function
-    /// @return assignedSequenceNumber A unique identifier for this request
+    /// @return sequenceNumber A unique identifier for this request
+    /// @return providerAddress The address of the provider that handled the request
     /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
     /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
     /// the generated random number.
@@ -78,13 +81,14 @@ interface IEntropyV2 is EntropyEventsV2 {
     function requestV2(
         address provider,
         uint32 gasLimit
-    ) external payable returns (uint64 assignedSequenceNumber);
+    ) external payable returns (uint64 sequenceNumber, address providerAddress);
 
     /// @notice Request a random number from a specific provider with a user-provided random number and gas limit
     /// @param provider The address of the provider to request from
     /// @param userRandomNumber A random number provided by the user for additional entropy
     /// @param gasLimit The gas limit for the callback function. Pass 0 to get a sane default value -- see note below.
-    /// @return assignedSequenceNumber A unique identifier for this request
+    /// @return sequenceNumber A unique identifier for this request
+    /// @return providerAddress The address of the provider that handled the request
     /// @dev The address calling this function should be a contract that inherits from the IEntropyConsumer interface.
     /// The `entropyCallback` method on that interface will receive a callback with the returned sequence number and
     /// the generated random number.
@@ -100,7 +104,7 @@ interface IEntropyV2 is EntropyEventsV2 {
         address provider,
         bytes32 userRandomNumber,
         uint32 gasLimit
-    ) external payable returns (uint64 assignedSequenceNumber);
+    ) external payable returns (uint64 sequenceNumber, address providerAddress);
 
     /// @notice Get information about a specific entropy provider
     /// @param provider The address of the provider to query

+ 24 - 4
target_chains/ethereum/entropy_sdk/solidity/abis/IEntropyV2.json

@@ -552,8 +552,13 @@
     "outputs": [
       {
         "internalType": "uint64",
-        "name": "assignedSequenceNumber",
+        "name": "sequenceNumber",
         "type": "uint64"
+      },
+      {
+        "internalType": "address",
+        "name": "providerAddress",
+        "type": "address"
       }
     ],
     "stateMutability": "payable",
@@ -576,8 +581,13 @@
     "outputs": [
       {
         "internalType": "uint64",
-        "name": "assignedSequenceNumber",
+        "name": "sequenceNumber",
         "type": "uint64"
+      },
+      {
+        "internalType": "address",
+        "name": "providerAddress",
+        "type": "address"
       }
     ],
     "stateMutability": "payable",
@@ -589,8 +599,13 @@
     "outputs": [
       {
         "internalType": "uint64",
-        "name": "assignedSequenceNumber",
+        "name": "sequenceNumber",
         "type": "uint64"
+      },
+      {
+        "internalType": "address",
+        "name": "providerAddress",
+        "type": "address"
       }
     ],
     "stateMutability": "payable",
@@ -618,8 +633,13 @@
     "outputs": [
       {
         "internalType": "uint64",
-        "name": "assignedSequenceNumber",
+        "name": "sequenceNumber",
         "type": "uint64"
+      },
+      {
+        "internalType": "address",
+        "name": "providerAddress",
+        "type": "address"
       }
     ],
     "stateMutability": "payable",

+ 1 - 1
target_chains/ethereum/entropy_sdk/solidity/package.json

@@ -1,6 +1,6 @@
 {
   "name": "@pythnetwork/entropy-sdk-solidity",
-  "version": "2.0.0",
+  "version": "3.0.0",
   "description": "Generate secure random numbers with Pyth Entropy",
   "type": "module",
   "repository": {