From 658d7ca032bba5d7c1ca5c1e9a75415773a0cf20 Mon Sep 17 00:00:00 2001 From: Dev Kalra Date: Thu, 18 Jan 2024 13:55:48 +0530 Subject: [PATCH] [entropy] set provider fee and uri (#1230) * set provider fee and uri * update comment * pre commit * abis gen * update tests --- .../contracts/contracts/entropy/Entropy.sol | 27 +++++++ .../contracts/forge-test/Entropy.t.sol | 33 ++++++++ .../entropy_sdk/solidity/EntropyEvents.sol | 4 + .../entropy_sdk/solidity/IEntropy.sol | 4 + .../solidity/abis/EntropyEvents.json | 50 ++++++++++++ .../entropy_sdk/solidity/abis/IEntropy.json | 76 +++++++++++++++++++ 6 files changed, 194 insertions(+) diff --git a/target_chains/ethereum/contracts/contracts/entropy/Entropy.sol b/target_chains/ethereum/contracts/contracts/entropy/Entropy.sol index b06265dd7b..b04cea2902 100644 --- a/target_chains/ethereum/contracts/contracts/entropy/Entropy.sol +++ b/target_chains/ethereum/contracts/contracts/entropy/Entropy.sol @@ -342,6 +342,33 @@ abstract contract Entropy is IEntropy, EntropyState { return _state.accruedPythFeesInWei; } + // Set provider fee. It will revert if provider is not registered. + function setProviderFee(uint128 newFeeInWei) external override { + EntropyStructs.ProviderInfo storage provider = _state.providers[ + msg.sender + ]; + + if (provider.sequenceNumber == 0) { + revert EntropyErrors.NoSuchProvider(); + } + uint128 oldFeeInWei = provider.feeInWei; + provider.feeInWei = newFeeInWei; + emit ProviderFeeUpdated(msg.sender, oldFeeInWei, newFeeInWei); + } + + // Set provider uri. It will revert if provider is not registered. + function setProviderUri(bytes calldata newUri) external override { + EntropyStructs.ProviderInfo storage provider = _state.providers[ + msg.sender + ]; + if (provider.sequenceNumber == 0) { + revert EntropyErrors.NoSuchProvider(); + } + bytes memory oldUri = provider.uri; + provider.uri = newUri; + emit ProviderUriUpdated(msg.sender, oldUri, newUri); + } + function constructUserCommitment( bytes32 userRandomness ) public pure override returns (bytes32 userCommitment) { diff --git a/target_chains/ethereum/contracts/forge-test/Entropy.t.sol b/target_chains/ethereum/contracts/forge-test/Entropy.t.sol index 38b79558d7..f5eb005445 100644 --- a/target_chains/ethereum/contracts/forge-test/Entropy.t.sol +++ b/target_chains/ethereum/contracts/forge-test/Entropy.t.sol @@ -696,4 +696,37 @@ contract EntropyTest is Test, EntropyTestUtils { assertEq(providerInfo1.uri, provider1Uri); assertEq(providerInfo1.commitmentMetadata, provider1CommitmentMetadata); } + + function testSetProviderFee() public { + assertNotEq(random.getProviderInfo(provider1).feeInWei, 1); + + vm.prank(provider1); + random.setProviderFee(1); + + assertEq(random.getProviderInfo(provider1).feeInWei, 1); + } + + function testSetProviderFeeByUnregistered() public { + vm.prank(unregisteredProvider); + vm.expectRevert(); + random.setProviderFee(1); + } + + function testSetProviderUri() public { + bytes memory newUri = bytes("https://new.com"); + + assertNotEq0(random.getProviderInfo(provider1).uri, newUri); + + vm.prank(provider1); + random.setProviderUri(newUri); + + assertEq0(random.getProviderInfo(provider1).uri, newUri); + } + + function testSetProviderUriByUnregistered() public { + bytes memory newUri = bytes("https://new.com"); + vm.prank(unregisteredProvider); + vm.expectRevert(); + random.setProviderUri(newUri); + } } diff --git a/target_chains/ethereum/entropy_sdk/solidity/EntropyEvents.sol b/target_chains/ethereum/entropy_sdk/solidity/EntropyEvents.sol index 39e6afb52f..8ee9326539 100644 --- a/target_chains/ethereum/entropy_sdk/solidity/EntropyEvents.sol +++ b/target_chains/ethereum/entropy_sdk/solidity/EntropyEvents.sol @@ -15,4 +15,8 @@ interface EntropyEvents { bytes32 blockHash, bytes32 randomNumber ); + + event ProviderFeeUpdated(address provider, uint128 oldFee, uint128 newFee); + + event ProviderUriUpdated(address provider, bytes oldUri, bytes newUri); } diff --git a/target_chains/ethereum/entropy_sdk/solidity/IEntropy.sol b/target_chains/ethereum/entropy_sdk/solidity/IEntropy.sol index 229f5a5ded..2ba41bf31f 100644 --- a/target_chains/ethereum/entropy_sdk/solidity/IEntropy.sol +++ b/target_chains/ethereum/entropy_sdk/solidity/IEntropy.sol @@ -70,6 +70,10 @@ interface IEntropy is EntropyEvents { view returns (uint128 accruedPythFeesInWei); + function setProviderFee(uint128 newFeeInWei) external; + + function setProviderUri(bytes calldata newUri) external; + function constructUserCommitment( bytes32 userRandomness ) external pure returns (bytes32 userCommitment); diff --git a/target_chains/ethereum/entropy_sdk/solidity/abis/EntropyEvents.json b/target_chains/ethereum/entropy_sdk/solidity/abis/EntropyEvents.json index 7daa3644df..f5c51b6027 100644 --- a/target_chains/ethereum/entropy_sdk/solidity/abis/EntropyEvents.json +++ b/target_chains/ethereum/entropy_sdk/solidity/abis/EntropyEvents.json @@ -1,4 +1,54 @@ [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "oldFee", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "newFee", + "type": "uint128" + } + ], + "name": "ProviderFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "oldUri", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "newUri", + "type": "bytes" + } + ], + "name": "ProviderUriUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ diff --git a/target_chains/ethereum/entropy_sdk/solidity/abis/IEntropy.json b/target_chains/ethereum/entropy_sdk/solidity/abis/IEntropy.json index e45e1811b5..311ddef756 100644 --- a/target_chains/ethereum/entropy_sdk/solidity/abis/IEntropy.json +++ b/target_chains/ethereum/entropy_sdk/solidity/abis/IEntropy.json @@ -1,4 +1,54 @@ [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "oldFee", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "newFee", + "type": "uint128" + } + ], + "name": "ProviderFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "provider", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "oldUri", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "newUri", + "type": "bytes" + } + ], + "name": "ProviderUriUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -509,6 +559,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint128", + "name": "newFeeInWei", + "type": "uint128" + } + ], + "name": "setProviderFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "newUri", + "type": "bytes" + } + ], + "name": "setProviderUri", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ {