Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions target_chains/ethereum/contracts/contracts/entropy/Entropy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
33 changes: 33 additions & 0 deletions target_chains/ethereum/contracts/forge-test/Entropy.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
4 changes: 4 additions & 0 deletions target_chains/ethereum/entropy_sdk/solidity/EntropyEvents.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
4 changes: 4 additions & 0 deletions target_chains/ethereum/entropy_sdk/solidity/IEntropy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down
76 changes: 76 additions & 0 deletions target_chains/ethereum/entropy_sdk/solidity/abis/IEntropy.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down Expand Up @@ -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": [
{
Expand Down