Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8ff7553

Browse files
refactor: removed contract-level param setting
1 parent 0c382a3 commit 8ff7553

File tree

5 files changed

+63
-203
lines changed

5 files changed

+63
-203
lines changed

‎contracts/0.7.x/CrossChainBinaryArbitration.sol‎

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,6 @@ interface ICrossChainArbitrable is IArbitrable {
4646
* @dev Arbitration Proxy on the side chain.
4747
*/
4848
interface IHomeBinaryArbitrationProxy {
49-
/**
50-
* @dev Emitted when an arbitrable contract metadata is registered.
51-
* @param _arbitrable The address of the arbitrable contract.
52-
* @param _metaEvidence The MetaEvicence related to the arbitrable item.
53-
*/
54-
event ContractMetaEvidenceRegistered(ICrossChainArbitrable indexed _arbitrable, string _metaEvidence);
55-
56-
/**
57-
* @dev Emitted when an arbitrable contract arbitrator extra data is registered.
58-
* @param _arbitrable The address of the arbitrable contract.
59-
* @param _arbitratorExtraData The extra data for the arbitrator.
60-
*/
61-
event ContractArbitratorExtraDataRegistered(ICrossChainArbitrable indexed _arbitrable, bytes _arbitratorExtraData);
62-
6349
/**
6450
* @dev Emitted when an item is registered.
6551
* @param _arbitrable The address of the arbitrable contract.
@@ -149,20 +135,6 @@ interface IHomeBinaryArbitrationProxy {
149135
*/
150136
event DisputeRuled(ICrossChainArbitrable indexed _arbitrable, uint256 indexed _arbitrableItemID, uint256 _ruling);
151137

152-
/**
153-
* @notice Registers meta evidence at arbitrable contract level.
154-
* @dev Should be called only by the arbitrable contract.
155-
* @param _metaEvidence The MetaEvicence related to the arbitrable item.
156-
*/
157-
function registerContractMetaEvidence(string calldata _metaEvidence) external;
158-
159-
/**
160-
* @notice Registers arbitrator extra data at arbitrable contract level.
161-
* @dev Should be called only by the arbitrable contract.
162-
* @param _arbitratorExtraData The extra data for the arbitrator.
163-
*/
164-
function registerContractArbitratorExtraData(bytes calldata _arbitratorExtraData) external;
165-
166138
/**
167139
* @notice Registers meta evidence at arbitrable item level.
168140
* @dev Should be called only by the arbitrable contract.
@@ -261,20 +233,6 @@ interface IHomeBinaryArbitrationProxy {
261233
* @dev Arbitration Proxy on the main chain.
262234
*/
263235
interface IForeignBinaryArbitrationProxy is IArbitrable {
264-
/**
265-
* @dev Emitted when an arbitrable contract meta evidence is received.
266-
* @param _arbitrable The address of the arbitrable contract.
267-
* @param _metaEvidence The MetaEvicence related to the arbitrable item.
268-
*/
269-
event ContractMetaEvidenceReceived(address indexed _arbitrable, string _metaEvidence);
270-
271-
/**
272-
* @dev Emitted when an arbitrable contract arbitrator extra data is received.
273-
* @param _arbitrable The address of the arbitrable contract.
274-
* @param _arbitratorExtraData The extra data for the arbitrator.
275-
*/
276-
event ContractArbitratorExtraDataReceived(address indexed _arbitrable, bytes _arbitratorExtraData);
277-
278236
/**
279237
* @dev Emitted when an arbitrable item meta evidence is received.
280238
* @param _arbitrable The address of the arbitrable contract.
@@ -363,22 +321,6 @@ interface IForeignBinaryArbitrationProxy is IArbitrable {
363321
*/
364322
event DisputeRuled(uint256 indexed _arbitrationID, uint256 _ruling);
365323

366-
/**
367-
* @notice Receives meta evidence at arbitrable contract level.
368-
* @dev Should be called only by the arbitrable contract.
369-
* @param _arbitrable The address of the arbitrable contract.
370-
* @param _metaEvidence The MetaEvicence related to the arbitrable item.
371-
*/
372-
function receiveContractMetaEvidence(address _arbitrable, string calldata _metaEvidence) external;
373-
374-
/**
375-
* @notice Receives arbitrator extra data at arbitrable contract level.
376-
* @dev Should be called only by the arbitrable contract.
377-
* @param _arbitrable The address of the arbitrable contract.
378-
* @param _arbitratorExtraData The extra data for the arbitrator.
379-
*/
380-
function receiveContractArbitratorExtraData(address _arbitrable, bytes calldata _arbitratorExtraData) external;
381-
382324
/**
383325
* @notice Receives meta evidence at arbitrable item level.
384326
* @dev Should be called only by the arbitrable contract.

‎contracts/0.7.x/ForeignBinaryArbitrationProxy.sol‎

Lines changed: 47 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -67,39 +67,19 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
6767
mapping(address => uint256[3]) contributions; // Maps contributors to their contributions for each side.
6868
}
6969

70-
struct ContractMetaEvidence {
71-
bool registered;
72-
string value;
73-
}
74-
75-
struct ContractArbitratorExtraData {
76-
bool registered;
77-
bytes value;
78-
}
79-
80-
struct ContractDisputeParams {
81-
ContractMetaEvidence metaEvidence;
82-
ContractArbitratorExtraData arbitratorExtraData;
83-
}
84-
85-
struct ItemMetaEvidence {
70+
struct MetaEvidenceChanges {
8671
string[] values;
8772
uint256[] arbitrableItemIDs;
8873
}
8974

90-
struct ItemArbitratorExtraData {
75+
struct ArbitratorExtraDataChanges {
9176
bytes[] values;
9277
uint256[] arbitrableItemIDs;
9378
}
9479

95-
struct ItemDisputeParams {
96-
ItemMetaEvidence metaEvidence;
97-
ItemArbitratorExtraData arbitratorExtraData;
98-
}
99-
100-
struct DisputeParams {
101-
mapping(address => ContractDisputeParams) forContract;
102-
mapping(address => ItemDisputeParams) forItem;
80+
struct DisputeParamChanges {
81+
MetaEvidenceChanges metaEvidence;
82+
ArbitratorExtraDataChanges arbitratorExtraData;
10383
}
10484

10585
/// @dev A value depositor won't be able to pay.
@@ -144,11 +124,8 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
144124
/// @dev Maps the disputeIDs to arbitrationIDs.
145125
mapping(uint256 => uint256) public disputeIDToArbitrationID;
146126

147-
/// @dev Maps a contract to the dispute params level setting.
148-
mapping(address => DisputeParamsLevel) public contractToParamsLevel;
149-
150-
/// @dev Stores disputeParams for dispute creation for contracts and items.
151-
DisputeParams private disputeParams;
127+
/// @dev Stores disputeParamChanges for dispute creation for contracts and items.
128+
mapping(address => DisputeParamChanges) private disputeParamChanges;
152129

153130
/**
154131
* @dev Emitted when someone contributes to a dispute or appeal.
@@ -276,39 +253,6 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
276253
loserStakeMultiplier = _loserStakeMultiplier;
277254
}
278255

279-
/**
280-
* @notice Receives meta evidence at arbitrable contract level.
281-
* @dev Should be called only by the arbitrable contract.
282-
* @param _metaEvidence The MetaEvicence related to the arbitrable item.
283-
*/
284-
function receiveContractMetaEvidence(address _arbitrable, string calldata _metaEvidence) external override {
285-
require(contractToParamsLevel[_arbitrable] != DisputeParamsLevel.Item, "Allowed only at item level");
286-
contractToParamsLevel[_arbitrable] = DisputeParamsLevel.Contract;
287-
288-
disputeParams.forContract[_arbitrable].metaEvidence.registered = true;
289-
disputeParams.forContract[_arbitrable].metaEvidence.value = _metaEvidence;
290-
291-
emit ContractMetaEvidenceReceived(_arbitrable, _metaEvidence);
292-
}
293-
294-
/**
295-
* @notice Receives arbitrator extra data at arbitrable contract level.
296-
* @dev Should be called only by the arbitrable contract.
297-
* @param _arbitratorExtraData The extra data for the arbitrator.
298-
*/
299-
function receiveContractArbitratorExtraData(address _arbitrable, bytes calldata _arbitratorExtraData)
300-
external
301-
override
302-
{
303-
require(contractToParamsLevel[_arbitrable] != DisputeParamsLevel.Item, "Allowed only at item level");
304-
contractToParamsLevel[_arbitrable] = DisputeParamsLevel.Contract;
305-
306-
disputeParams.forContract[_arbitrable].arbitratorExtraData.registered = true;
307-
disputeParams.forContract[_arbitrable].arbitratorExtraData.value = _arbitratorExtraData;
308-
309-
emit ContractArbitratorExtraDataReceived(_arbitrable, _arbitratorExtraData);
310-
}
311-
312256
/**
313257
* @notice Receives meta evidence at arbitrable item level.
314258
* @dev Should be called only by the arbitrable contract.
@@ -320,20 +264,24 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
320264
uint256 _arbitrableItemID,
321265
string calldata _metaEvidence
322266
) external override {
323-
require(contractToParamsLevel[_arbitrable] != DisputeParamsLevel.Contract, "Allowed only at contract level");
324-
contractToParamsLevel[_arbitrable] = DisputeParamsLevel.Item;
267+
MetaEvidenceChanges storage metaEvidenceChanges = disputeParamChanges[_arbitrable].metaEvidence;
325268

326-
ItemMetaEvidence storage itemMetaEvidence = disputeParams.forItem[_arbitrable].metaEvidence;
269+
uint256 listSize = metaEvidenceChanges.arbitrableItemIDs.length;
327270

328-
uint256 listSize = itemMetaEvidence.arbitrableItemIDs.length;
329-
// Should allow to register only if the list is empty or arbitrable item ID is larger than the latest registered one.
330-
require(
331-
listSize == 0 || itemMetaEvidence.arbitrableItemIDs[listSize - 1] < _arbitrableItemID,
332-
"Cannot register MetaEvidence"
333-
);
271+
if (listSize > 0) {
272+
require(
273+
_arbitrableItemID > metaEvidenceChanges.arbitrableItemIDs[listSize - 1],
274+
"Item ID value lower than latest"
275+
);
276+
require(
277+
keccak256(abi.encodePacked(metaEvidenceChanges.values[listSize - 1])) ==
278+
keccak256(abi.encodePacked(_metaEvidence)),
279+
"MetaEvidence should be different"
280+
);
281+
}
334282

335-
itemMetaEvidence.arbitrableItemIDs.push(_arbitrableItemID);
336-
itemMetaEvidence.values.push(_metaEvidence);
283+
metaEvidenceChanges.values.push(_metaEvidence);
284+
metaEvidenceChanges.arbitrableItemIDs.push(_arbitrableItemID);
337285

338286
emit ItemMetaEvidenceReceived(_arbitrable, _arbitrableItemID, _metaEvidence);
339287
}
@@ -349,21 +297,24 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
349297
uint256 _arbitrableItemID,
350298
bytes calldata _arbitratorExtraData
351299
) external override {
352-
require(contractToParamsLevel[_arbitrable] != DisputeParamsLevel.Contract, "Allowed only at contract level");
353-
contractToParamsLevel[_arbitrable] = DisputeParamsLevel.Item;
354-
355-
ItemArbitratorExtraData storage itemArbitratorExtraData = disputeParams.forItem[_arbitrable]
300+
ArbitratorExtraDataChanges storage arbitratorExtraDataChanges = disputeParamChanges[_arbitrable]
356301
.arbitratorExtraData;
357302

358-
uint256 listSize = itemArbitratorExtraData.arbitrableItemIDs.length;
359-
// Should allow to register only if the list is empty or arbitrable item ID is larger than the latest registered one.
360-
require(
361-
listSize == 0 || itemArbitratorExtraData.arbitrableItemIDs[listSize - 1] < _arbitrableItemID,
362-
"Cannot register extra data"
363-
);
303+
uint256 listSize = arbitratorExtraDataChanges.arbitrableItemIDs.length;
304+
if (listSize > 0) {
305+
require(
306+
_arbitrableItemID > arbitratorExtraDataChanges.arbitrableItemIDs[listSize - 1],
307+
"Item ID value lower than latest"
308+
);
309+
require(
310+
keccak256(abi.encodePacked(arbitratorExtraDataChanges.values[listSize - 1])) ==
311+
keccak256(abi.encodePacked(_arbitratorExtraData)),
312+
"Extra data should be different"
313+
);
314+
}
364315

365-
itemArbitratorExtraData.arbitrableItemIDs.push(_arbitrableItemID);
366-
itemArbitratorExtraData.values.push(_arbitratorExtraData);
316+
arbitratorExtraDataChanges.values.push(_arbitratorExtraData);
317+
arbitratorExtraDataChanges.arbitrableItemIDs.push(_arbitrableItemID);
367318

368319
emit ItemArbitratorExtraDataReceived(_arbitrable, _arbitrableItemID, _arbitratorExtraData);
369320
}
@@ -908,8 +859,6 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
908859
view
909860
returns (bytes memory arbitratorExtraData, string memory metaEvidence)
910861
{
911-
require(contractToParamsLevel[_arbitrable] == DisputeParamsLevel.Contract, "Not available for contract");
912-
913862
return getDisputeParams(_arbitrable, 0);
914863
}
915864

@@ -925,8 +874,6 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
925874
view
926875
returns (bytes memory arbitratorExtraData, string memory metaEvidence)
927876
{
928-
require(contractToParamsLevel[_arbitrable] == DisputeParamsLevel.Item, "Not available for item");
929-
930877
return getDisputeParams(_arbitrable, _arbitrableItemID);
931878
}
932879

@@ -943,25 +890,18 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
943890
view
944891
returns (bytes storage arbitratorExtraData, string storage metaEvidence)
945892
{
946-
require(contractToParamsLevel[_arbitrable] != DisputeParamsLevel.None, "Dispute params level not set");
947-
948-
if (contractToParamsLevel[_arbitrable] == DisputeParamsLevel.Contract) {
949-
ContractDisputeParams storage params = disputeParams.forContract[_arbitrable];
950-
require(
951-
params.metaEvidence.registered && params.arbitratorExtraData.registered,
952-
"Dispute params not registered"
953-
);
954-
955-
return (params.arbitratorExtraData.value, params.metaEvidence.value);
956-
}
893+
ArbitratorExtraDataChanges storage arbitratorExtraDataChanges = disputeParamChanges[_arbitrable]
894+
.arbitratorExtraData;
957895

958-
ItemDisputeParams storage params = disputeParams.forItem[_arbitrable];
959-
metaEvidence = params.metaEvidence.values[findBestIndex(
960-
params.metaEvidence.arbitrableItemIDs,
896+
arbitratorExtraData = arbitratorExtraDataChanges.values[findBestIndex(
897+
arbitratorExtraDataChanges.arbitrableItemIDs,
961898
_arbitrableItemID
962899
)];
963-
arbitratorExtraData = params.arbitratorExtraData.values[findBestIndex(
964-
params.arbitratorExtraData.arbitrableItemIDs,
900+
901+
MetaEvidenceChanges storage metaEvidenceChanges = disputeParamChanges[_arbitrable].metaEvidence;
902+
903+
metaEvidence = metaEvidenceChanges.values[findBestIndex(
904+
metaEvidenceChanges.arbitrableItemIDs,
965905
_arbitrableItemID
966906
)];
967907
}
@@ -974,7 +914,7 @@ contract ForeignBinaryArbitrationProxy is IForeignBinaryArbitrationProxy, IEvide
974914
* @return The index for the value.
975915
*/
976916
function findBestIndex(uint256[] storage _list, uint256 _value) internal view returns (uint256) {
977-
require(_list.length > 0 && _value >= _list[0], "Not found");
917+
require(_list.length > 0 && _value >= _list[0], "Item not found");
978918

979919
uint256 left = 0;
980920
uint256 right = _list.length;

‎contracts/0.7.x/HomeBinaryArbitrationProxy.sol‎

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -128,36 +128,6 @@ contract HomeBinaryArbitrationProxy is IHomeBinaryArbitrationProxy {
128128
foreignProxy = _foreignProxy;
129129
}
130130

131-
/**
132-
* @notice Registers the meta evidence at the arbitrable contact level.
133-
* @dev Should be called only by the arbitrable contract.
134-
* @param _metaEvidence The MetaEvicence related to the arbitrable item.
135-
*/
136-
function registerContractMetaEvidence(string calldata _metaEvidence) external override onlyIfInitialized {
137-
emit ContractMetaEvidenceRegistered(ICrossChainArbitrable(msg.sender), _metaEvidence);
138-
139-
bytes4 methodSelector = IForeignBinaryArbitrationProxy(0).receiveContractMetaEvidence.selector;
140-
bytes memory data = abi.encodeWithSelector(methodSelector, msg.sender, _metaEvidence);
141-
amb.requireToPassMessage(foreignProxy, data, amb.maxGasPerTx());
142-
}
143-
144-
/**
145-
* @notice Registers the arbitrator extra data at the arbitrable contact level.
146-
* @dev Should be called only by the arbitrable contract.
147-
* @param _arbitratorExtraData The extra data for the arbitrator.
148-
*/
149-
function registerContractArbitratorExtraData(bytes calldata _arbitratorExtraData)
150-
external
151-
override
152-
onlyIfInitialized
153-
{
154-
emit ContractArbitratorExtraDataRegistered(ICrossChainArbitrable(msg.sender), _arbitratorExtraData);
155-
156-
bytes4 methodSelector = IForeignBinaryArbitrationProxy(0).receiveContractArbitratorExtraData.selector;
157-
bytes memory data = abi.encodeWithSelector(methodSelector, msg.sender, _arbitratorExtraData);
158-
amb.requireToPassMessage(foreignProxy, data, amb.maxGasPerTx());
159-
}
160-
161131
/**
162132
* @notice Registers the meta evidence at the arbitrable item level.
163133
* @dev Should be called only by the arbitrable contract.

‎contracts/0.7.x/mocks/MockArbitrable.sol‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ contract MockArbitrable is ICrossChainArbitrable {
5353
}
5454

5555
function registerContract() external onlyGovernor {
56-
arbitrator.registerContractMetaEvidence(metaEvidence);
57-
arbitrator.registerContractArbitratorExtraData(arbitratorExtraData);
56+
arbitrator.registerItemMetaEvidence(0, metaEvidence);
57+
arbitrator.registerItemArbitratorExtraData(0, arbitratorExtraData);
5858
}
5959

6060
function createItem(string calldata _metaEvidence, bytes calldata _arbitratorExtraData) external {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /