@@ -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 ;
0 commit comments