Skip to content

Commit bc0904c

Browse files
authored
Merge pull request #3 from lidofinance/feature/reward-program-name
Add name to reward programs
2 parents ec694ad + fb23f73 commit bc0904c

File tree

8 files changed

+45
-28
lines changed

8 files changed

+45
-28
lines changed

contracts/EVMScriptFactories/AddRewardProgram.sol

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ contract AddRewardProgram is TrustedCaller, IEVMScriptFactory {
4747
onlyTrustedCaller(_creator)
4848
returns (bytes memory)
4949
{
50+
(address rewardProgramAddress,) = _decodeEVMScriptCallData(_evmScriptCallData);
5051
require(
51-
!rewardProgramsRegistry.isRewardProgram(_decodeEVMScriptCallData(_evmScriptCallData)),
52+
!rewardProgramsRegistry.isRewardProgram(rewardProgramAddress),
5253
ERROR_REWARD_PROGRAM_ALREADY_ADDED
5354
);
5455

@@ -66,7 +67,7 @@ contract AddRewardProgram is TrustedCaller, IEVMScriptFactory {
6667
function decodeEVMScriptCallData(bytes memory _evmScriptCallData)
6768
external
6869
pure
69-
returns (address)
70+
returns (address, string memory)
7071
{
7172
return _decodeEVMScriptCallData(_evmScriptCallData);
7273
}
@@ -78,8 +79,8 @@ contract AddRewardProgram is TrustedCaller, IEVMScriptFactory {
7879
function _decodeEVMScriptCallData(bytes memory _evmScriptCallData)
7980
private
8081
pure
81-
returns (address)
82+
returns (address, string memory)
8283
{
83-
return abi.decode(_evmScriptCallData, (address));
84+
return abi.decode(_evmScriptCallData, (address, string));
8485
}
8586
}

contracts/RewardProgramsRegistry.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ contract RewardProgramsRegistry is TrustedCaller {
1212
// -------------
1313
// EVENTS
1414
// -------------
15-
event RewardProgramAdded(address indexed _rewardProgram);
15+
event RewardProgramAdded(address indexed _rewardProgram, string _title);
1616
event RewardProgramRemoved(address indexed _rewardProgram);
1717

1818
// -------------
@@ -43,12 +43,12 @@ contract RewardProgramsRegistry is TrustedCaller {
4343
// -------------
4444

4545
/// @notice Adds address to list of allowed reward programs
46-
function addRewardProgram(address _rewardProgram) external onlyTrustedCaller(msg.sender) {
46+
function addRewardProgram(address _rewardProgram, string memory _title) external onlyTrustedCaller(msg.sender) {
4747
require(rewardProgramIndices[_rewardProgram] == 0, ERROR_REWARD_PROGRAM_ALREADY_ADDED);
4848

4949
rewardPrograms.push(_rewardProgram);
5050
rewardProgramIndices[_rewardProgram] = rewardPrograms.length;
51-
emit RewardProgramAdded(_rewardProgram);
51+
emit RewardProgramAdded(_rewardProgram, _title);
5252
}
5353

5454
/// @notice Removes address from list of allowed reward programs

specification.md

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,14 +401,14 @@ Creates EVMScript to add new reward program address to `RewardProgramsRegistry`.
401401

402402
#### function createEVMScript(address \_creator, bytes \_evmScriptCallData) external view returns (bytes)
403403

404-
Creates EVMScript to add new reward address to `RewardProgramsRegistry`. `_evmScriptCallData` contains encoded tuple: `(address _rewardProgram)`, where `_rewardProgram` - new reward program address to add. To successfully create EVMScript next requirements must be met:
404+
Creates EVMScript to add new reward address to `RewardProgramsRegistry`. `_evmScriptCallData` contains encoded tuple: `(address _rewardProgram, string _title)`, where `_rewardProgram` - new reward program address to add, `_title` - title of new reward program. To successfully create EVMScript next requirements must be met:
405405

406406
- `_creator` must be equal to `trustedCaller` address
407407
- `_rewardProgram` address hasn't been added in `RewardProgramsRegistry` earlier.
408408

409-
#### function decodeEVMScriptCallData(bytes \_evmScriptCallData) external returns (address \_rewardProgram)
409+
#### function decodeEVMScriptCallData(bytes \_evmScriptCallData) external returns (address \_rewardProgram, string memory _title)
410410

411-
Decodes `_evmScriptCallData` into tuple `(address _rewardProgram)`.
411+
Decodes `_evmScriptCallData` into tuple `(address _rewardProgram, string _title)`.
412412

413413
## RemoveRewardProgram
414414

@@ -435,14 +435,26 @@ Stores list of addresses with reward programs. TopUpRewardsProgram EVMScript fac
435435

436436
### Methods
437437

438-
#### addRewardProgram(address \_rewardProgram) external
438+
#### addRewardProgram(address \_rewardProgram, string memory _title) external
439439

440440
Adds reward program address to RewardProgramsRegistry, if it hasn't been added yet, throws `"REWARD_PROGRAM_ALREADY_ADDED"` in other cases. Might be called only by EVMScriptExecutor contract.
441441

442+
Events:
443+
444+
```solidity=
445+
event RewardProgramAdded(address indexed _rewardProgram, string _title)
446+
```
447+
442448
#### removeRewardProgram(address \_rewardProgram) external
443449

444450
Removes reward program address from RewardProgramsRegistry. Throws `"REWARD_PROGRAM_NOT_FOUND"` if program address misses from the array. Might be called only by EVMScriptExecutor contract.
445451

452+
Events:
453+
454+
```solidity=
455+
event RewardProgramRemoved(address indexed _rewardProgram)
456+
```
457+
446458
#### isRewardProgram(address \_rewardProgram) external view (returns bool)
447459

448460
Shows if address is whitelisted in RewardProgramsRegistry.

tests/evm_script_factories/test_add_reward_program.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from utils.evm_script import encode_call_script
44

55
REWARD_PROGRAM_ADDRESS = "0xFFfFfFffFFfffFFfFFfFFFFFffFFFffffFfFFFfF"
6-
EVM_SCRIPT_CALL_DATA = "0x" + encode_single("(address)", [REWARD_PROGRAM_ADDRESS]).hex()
6+
REWARD_PROGRAM_TITLE = "New Reward Program"
7+
EVM_SCRIPT_CALL_DATA = "0x" + encode_single("(address,string)", [REWARD_PROGRAM_ADDRESS, REWARD_PROGRAM_TITLE]).hex()
78

89

910
def test_deploy(owner, reward_programs_registry):
@@ -25,7 +26,7 @@ def test_create_evm_script_reward_program_already_added(
2526
"Must revert with message 'REWARD_PROGRAM_ALREADY_ADDED'"
2627
"if reward program already listed in RewardProgramsRegistry"
2728
reward_programs_registry.addRewardProgram(
28-
REWARD_PROGRAM_ADDRESS, {"from": evm_script_executor_stub}
29+
REWARD_PROGRAM_ADDRESS, REWARD_PROGRAM_TITLE, {"from": evm_script_executor_stub}
2930
)
3031
assert reward_programs_registry.isRewardProgram(REWARD_PROGRAM_ADDRESS)
3132

@@ -44,7 +45,8 @@ def test_create_evm_script(owner, add_reward_program, reward_programs_registry):
4445
(
4546
reward_programs_registry.address,
4647
reward_programs_registry.addRewardProgram.encode_input(
47-
REWARD_PROGRAM_ADDRESS
48+
REWARD_PROGRAM_ADDRESS,
49+
REWARD_PROGRAM_TITLE
4850
),
4951
)
5052
]
@@ -57,5 +59,5 @@ def test_decode_evm_script_call_data(add_reward_program):
5759
"Must decode EVMScript call data correctly"
5860
assert (
5961
add_reward_program.decodeEVMScriptCallData(EVM_SCRIPT_CALL_DATA)
60-
== REWARD_PROGRAM_ADDRESS
62+
== (REWARD_PROGRAM_ADDRESS, REWARD_PROGRAM_TITLE)
6163
)

tests/evm_script_factories/test_remove_reward_program.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_create_evm_script(
3838
):
3939
"Must create correct EVMScript if all requirements are met"
4040
reward_programs_registry.addRewardProgram(
41-
REWARD_PROGRAM_ADDRESS, {"from": evm_script_executor_stub}
41+
REWARD_PROGRAM_ADDRESS, "", {"from": evm_script_executor_stub}
4242
)
4343
evm_script = remove_reward_program.createEVMScript(owner, EVM_SCRIPT_CALL_DATA)
4444
expected_evm_script = encode_call_script(

tests/evm_script_factories/test_top_up_reward_programs.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ def test_create_evm_script_zero_amount(
5252
"Must revert with message 'ZERO_AMOUNT' if some value in amounts has zero value"
5353
amounts = [1 ** 18, 0]
5454
reward_programs_registry.addRewardProgram(
55-
REWARD_PROGRAM_ADDRESSES[0], {"from": evm_script_executor_stub}
55+
REWARD_PROGRAM_ADDRESSES[0], "", {"from": evm_script_executor_stub}
5656
)
5757
reward_programs_registry.addRewardProgram(
58-
REWARD_PROGRAM_ADDRESSES[1], {"from": evm_script_executor_stub}
58+
REWARD_PROGRAM_ADDRESSES[1], "", {"from": evm_script_executor_stub}
5959
)
6060
with reverts("ZERO_AMOUNT"):
6161
top_up_reward_programs.createEVMScript(
@@ -78,10 +78,10 @@ def test_create_evm_script_reward_program_not_allowed(
7878
)
7979

8080
reward_programs_registry.addRewardProgram(
81-
REWARD_PROGRAM_ADDRESSES[0], {"from": evm_script_executor_stub}
81+
REWARD_PROGRAM_ADDRESSES[0], "", {"from": evm_script_executor_stub}
8282
)
8383
reward_programs_registry.addRewardProgram(
84-
REWARD_PROGRAM_ADDRESSES[1], {"from": evm_script_executor_stub}
84+
REWARD_PROGRAM_ADDRESSES[1], "", {"from": evm_script_executor_stub}
8585
)
8686

8787
# case with added reward programs
@@ -110,10 +110,10 @@ def test_create_evm_script(
110110
"Must create correct EVMScript if all requirements are met"
111111
# add reward programs
112112
reward_programs_registry.addRewardProgram(
113-
REWARD_PROGRAM_ADDRESSES[0], {"from": evm_script_executor_stub}
113+
REWARD_PROGRAM_ADDRESSES[0], "", {"from": evm_script_executor_stub}
114114
)
115115
reward_programs_registry.addRewardProgram(
116-
REWARD_PROGRAM_ADDRESSES[1], {"from": evm_script_executor_stub}
116+
REWARD_PROGRAM_ADDRESSES[1], "", {"from": evm_script_executor_stub}
117117
)
118118

119119
evm_script = top_up_reward_programs.createEVMScript(

tests/integration_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ def test_reward_programs_easy_track(
185185
):
186186
deployer = accounts[0]
187187
reward_program = accounts[5]
188+
reward_program_title = "New Reward Program"
188189
trusted_address = accounts[7]
189190

190191
# deploy easy track
@@ -287,7 +288,7 @@ def test_reward_programs_easy_track(
287288
# create new motion to add reward program
288289
tx = easy_track.createMotion(
289290
add_reward_program,
290-
encode_single("(address)", [reward_program.address]),
291+
encode_single("(address,string)", [reward_program.address, reward_program_title]),
291292
{"from": trusted_address},
292293
)
293294

tests/test_reward_programs_registry.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,22 @@ def test_add_reward_program_called_by_stranger(
1313
):
1414
"Must revert with message 'CALLER_IS_FORBIDDEN' error if called not by trustedCaller"
1515
with reverts("CALLER_IS_FORBIDDEN"):
16-
reward_programs_registry.addRewardProgram(stranger, {"from": stranger})
16+
reward_programs_registry.addRewardProgram(stranger, "", {"from": stranger})
1717

1818

1919
def test_add_reward_program(
2020
evm_script_executor_stub, stranger, reward_programs_registry
2121
):
22-
"Must add new reward program to rewardPrograms array and emit RewardProgramAdded(_rewardProgram) event."
22+
"Must add new reward program to rewardPrograms array and emit RewardProgramAdded(_rewardProgram, _title) event."
2323
"When called with already added reward program fails with error 'REWARD_PROGRAM_ALREADY_ADDED' error"
2424
new_reward_program = stranger
2525
tx = reward_programs_registry.addRewardProgram(
26-
new_reward_program, {"from": evm_script_executor_stub}
26+
new_reward_program, "Reward Program", {"from": evm_script_executor_stub}
2727
)
2828
# validate events
2929
assert len(tx.events) == 1
3030
assert tx.events["RewardProgramAdded"]["_rewardProgram"] == new_reward_program
31+
assert tx.events["RewardProgramAdded"]["_title"] == "Reward Program"
3132

3233
# validate that reward program was added
3334
reward_programs = reward_programs_registry.getRewardPrograms()
@@ -37,7 +38,7 @@ def test_add_reward_program(
3738
# fails when reward program adds second time
3839
with reverts("REWARD_PROGRAM_ALREADY_ADDED"):
3940
reward_programs_registry.addRewardProgram(
40-
new_reward_program, {"from": evm_script_executor_stub}
41+
new_reward_program, "Reward Program", {"from": evm_script_executor_stub}
4142
)
4243

4344

@@ -65,7 +66,7 @@ def test_remove_reward_program(reward_programs_registry, evm_script_executor_stu
6566

6667
for reward_program in reward_programs:
6768
reward_programs_registry.addRewardProgram(
68-
reward_program, {"from": evm_script_executor_stub}
69+
reward_program, "", {"from": evm_script_executor_stub}
6970
)
7071

7172
while len(reward_programs) > 0:

0 commit comments

Comments
 (0)