Skip to content

Commit 3a6d207

Browse files
authored
Merge pull request #1711 from kleros/fix/arbitrable-disputerequest-interface
Renamed DisputeRequest._arbitrableDisputeID into _arbitratorDisputeID
2 parents f07ae54 + 20e0d67 commit 3a6d207

15 files changed

+252
-244
lines changed

contracts/README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments
1111
#### Arbitrum One
1212

1313
- [DisputeKitClassicNeo: proxy](https://arbiscan.io/address/0xb7c292cD9Fd3d20De84a71AE1caF054eEB6374A9), [implementation](https://arbiscan.io/address/0x86Ac67e5550F837a650B4B0Cd4778D4293a2bDe3)
14-
- [DisputeResolverNeo](https://arbiscan.io/address/0x95eCE455bD817D6adB92F2383617d36eBE10D6EB)
14+
- [DisputeResolverNeo](https://arbiscan.io/address/0xE4066AE16685F66e30fb22e932B67E49220095c0)
1515
- [DisputeTemplateRegistry: proxy](https://arbiscan.io/address/0x52c9f5634361eD3641016e5d9783310f9EFf9e25), [implementation](https://arbiscan.io/address/0x4Ce87329d40f15509D5F9bF4D9Ce1A081A80CeFb)
1616
- [EvidenceModule: proxy](https://arbiscan.io/address/0xe62B776498F48061ef9425fCEf30F3d1370DB005), [implementation](https://arbiscan.io/address/0x827411b3e98bAe8c441efBf26842A1670f8f378F)
1717
- [KlerosCoreNeo: proxy](https://arbiscan.io/address/0xCd415C03dfa85B02646C7e2977F22a480c4354F1), [implementation](https://arbiscan.io/address/0x4DD8B69958eF1D7d5dA9347E9d9F57ADFC3dc284)
@@ -66,18 +66,18 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments
6666

6767
#### Arbitrum Sepolia
6868

69-
- [ArbitrableExample](https://sepolia.arbiscan.io/address/0xe48488AE09022a4F32c528d7EbfF92870225AcBf)
69+
- [ArbitrableExample](https://sepolia.arbiscan.io/address/0x3Eae72F076c68F5c354C73abC33EAA291ef1b2Fa)
7070
- [BlockHashRNG](https://sepolia.arbiscan.io/address/0x56d6d65Fe202232714794B5D5e4ed9894466Ee01)
7171
- [DAI](https://sepolia.arbiscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5)
7272
- [DAIFaucet](https://sepolia.arbiscan.io/address/0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E)
7373
- [DisputeKitClassic: proxy](https://sepolia.arbiscan.io/address/0x9426F127116C3652A262AE1eA48391AC8F44D35b), [implementation](https://sepolia.arbiscan.io/address/0x692CC78F2570181FFB99297965FeAA8352ab12E8)
7474
- [DisputeKitClassicNeo: proxy](https://sepolia.arbiscan.io/address/0xd40aA608801a639E292e10C235B90488D04070b1), [implementation](https://sepolia.arbiscan.io/address/0xE636AB278fBfc8712E807c589A362dc2396d2d2F)
7575
- [DisputeKitClassicUniversity: proxy](https://sepolia.arbiscan.io/address/0xDaE66157D72Baa099cd63a833c353776206feea4), [implementation](https://sepolia.arbiscan.io/address/0xf36fa321Bb64b6E39f5DA3dbb053ccE63D077f8B)
76-
- [DisputeResolver](https://sepolia.arbiscan.io/address/0xB8B36CC43f852f9F0484f53Eb38CaBBA28a81bF6)
77-
- [DisputeResolverNeo](https://sepolia.arbiscan.io/address/0xaBC213522c01354DC0Db2B3E89bDe0FCF44Acac6)
78-
- [DisputeResolverRuler](https://sepolia.arbiscan.io/address/0xF1544a7B9DC6aBFAbBD58A2feF8Ee8fEDdBA5DBd)
79-
- [DisputeResolverUniversity](https://sepolia.arbiscan.io/address/0x102Ba9488Df13842612e777aB16144cCACD38194)
80-
- [DisputeTemplateRegistry: proxy](https://sepolia.arbiscan.io/address/0x596D3B09E684D62217682216e9b7a0De75933391), [implementation](https://sepolia.arbiscan.io/address/0xc53b813ed94AaEb6F5518D60bf6a8109954bE3f6)
76+
- [DisputeResolver](https://sepolia.arbiscan.io/address/0xAE92948F5534A6ABCC7ea16a5Cd1984cD305Aa6E)
77+
- [DisputeResolverNeo](https://sepolia.arbiscan.io/address/0x42776e45977C6C4e172e564102Ab01540555b368)
78+
- [DisputeResolverRuler](https://sepolia.arbiscan.io/address/0x2F34E49853EaDB3253C9453aBeE37d3fbA395F6B)
79+
- [DisputeResolverUniversity](https://sepolia.arbiscan.io/address/0x9e8F92708705D3571F29589E441bF52c9e5f8811)
80+
- [DisputeTemplateRegistry: proxy](https://sepolia.arbiscan.io/address/0x596D3B09E684D62217682216e9b7a0De75933391), [implementation](https://sepolia.arbiscan.io/address/0xE00A43d3c3321A0e210F2F8bE2F3F75eC8a4951E)
8181
- [EvidenceModule: proxy](https://sepolia.arbiscan.io/address/0x57fd453FB0d16f8ca174E7386102D7170E17Be09), [implementation](https://sepolia.arbiscan.io/address/0x05AD81f245209b7f91885fd96e57c9da90554824)
8282
- [KlerosCore: proxy](https://sepolia.arbiscan.io/address/0xA54e7A16d7460e38a8F324eF46782FB520d58CE8), [implementation](https://sepolia.arbiscan.io/address/0x91a373BBdE0532F86410682F362e2Cf685e95085)
8383
- [KlerosCoreNeo: proxy](https://sepolia.arbiscan.io/address/0x26bf077037550e437605F07e25EfcAd510715C3A), [implementation](https://sepolia.arbiscan.io/address/0x3bE96b7eAF6A3640DBa1f7CE58776D5b790B74CB)

contracts/deployments/arbitrum/DisputeResolverNeo.json

+32-32
Large diffs are not rendered by default.

contracts/deployments/arbitrumSepoliaDevnet/ArbitrableExample.json

+39-39
Large diffs are not rendered by default.

contracts/deployments/arbitrumSepoliaDevnet/DisputeResolver.json

+33-33
Large diffs are not rendered by default.

contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverNeo.json

+32-32
Large diffs are not rendered by default.

contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverRuler.json

+32-32
Large diffs are not rendered by default.

contracts/deployments/arbitrumSepoliaDevnet/DisputeResolverUniversity.json

+33-33
Large diffs are not rendered by default.

contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@
270270
"0xc53b813ed94AaEb6F5518D60bf6a8109954bE3f6",
271271
"0xc4d66de8000000000000000000000000f1c7c037891525e360c59f708739ac09a7670c59"
272272
],
273-
"numDeployments": 1,
273+
"numDeployments": 2,
274274
"solcInputHash": "4ee8a1f2013c130bec1668c5304bc76a",
275275
"metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Simon Malatrait <[email protected]>\",\"details\":\"This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the upgradeable proxy with an initial implementation specified by `_implementation`. If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded function call, and allows initializing the storage of the proxy like a Solidity constructor.\"}},\"stateVariables\":{\"IMPLEMENTATION_SLOT\":{\"details\":\"Storage slot with the address of the current implementation. This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is validated in the constructor. NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\"}},\"title\":\"UUPS Proxy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/proxy/UUPSProxy.sol\":\"UUPSProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":100},\"remappings\":[]},\"sources\":{\"src/proxy/UUPSProxy.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n// Adapted from <https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.0/contracts/proxy/ERC1967/ERC1967Proxy.sol>\\n\\n/**\\n * @authors: [@malatrax]\\n * @reviewers: []\\n * @auditors: []\\n * @bounties: []\\n * @deployments: []\\n */\\npragma solidity 0.8.18;\\n\\n/**\\n * @title UUPS Proxy\\n * @author Simon Malatrait <[email protected]>\\n * @dev This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.\\n * @dev This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.\\n * @dev We refer to the Proxiable contract (as per ERC-1822) with `implementation`.\\n */\\ncontract UUPSProxy {\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n * NOTE: bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\\n */\\n bytes32 private constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n // ************************************* //\\n // * Constructor * //\\n // ************************************* //\\n\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_implementation`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_implementation`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _implementation, bytes memory _data) {\\n assembly {\\n sstore(IMPLEMENTATION_SLOT, _implementation)\\n }\\n\\n if (_data.length != 0) {\\n (bool success, ) = _implementation.delegatecall(_data);\\n require(success, \\\"Proxy Constructor failed\\\");\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * NOTE: This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Internal Views * //\\n // ************************************* //\\n\\n function _getImplementation() internal view returns (address implementation) {\\n assembly {\\n implementation := sload(IMPLEMENTATION_SLOT)\\n }\\n }\\n\\n // ************************************* //\\n // * Fallback * //\\n // ************************************* //\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable {\\n _delegate(_getImplementation());\\n }\\n\\n receive() external payable {\\n _delegate(_getImplementation());\\n }\\n}\\n\",\"keccak256\":\"0xb42b4da7d7d4de880da62538361fe7ca2aca28577880e53bafa8d07eb9a08c48\",\"license\":\"MIT\"}},\"version\":1}",
276276
"bytecode": "0x608060405234801561001057600080fd5b506040516102fe3803806102fe83398101604081905261002f9161014d565b817f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55805160001461010c576000826001600160a01b031682604051610075919061021b565b600060405180830381855af49150503d80600081146100b0576040519150601f19603f3d011682016040523d82523d6000602084013e6100b5565b606091505b505090508061010a5760405162461bcd60e51b815260206004820152601860248201527f50726f787920436f6e7374727563746f72206661696c65640000000000000000604482015260640160405180910390fd5b505b5050610237565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561014457818101518382015260200161012c565b50506000910152565b6000806040838503121561016057600080fd5b82516001600160a01b038116811461017757600080fd5b60208401519092506001600160401b038082111561019457600080fd5b818501915085601f8301126101a857600080fd5b8151818111156101ba576101ba610113565b604051601f8201601f19908116603f011681019083821181831017156101e2576101e2610113565b816040528281528860208487010111156101fb57600080fd5b61020c836020830160208801610129565b80955050505050509250929050565b6000825161022d818460208701610129565b9190910192915050565b60b9806102456000396000f3fe608060405236603757603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6060565b005b603560317f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e808015607e573d6000f35b3d6000fdfea26469706673582212207d50a904496089f6052d7370a78231ed4755a18daf824e0c243ac9c9c2a3b9ae64736f6c63430008120033",
@@ -281,7 +281,7 @@
281281
"0xf1C7c037891525E360C59f708739Ac09A7670c59"
282282
]
283283
},
284-
"implementation": "0xc53b813ed94AaEb6F5518D60bf6a8109954bE3f6",
284+
"implementation": "0xE00A43d3c3321A0e210F2F8bE2F3F75eC8a4951E",
285285
"devdoc": {
286286
"author": "Simon Malatrait <[email protected]>",
287287
"details": "This contract implements a UUPS Proxy compliant with ERC-1967 & ERC-1822.This contract delegates all calls to another contract (UUPS Proxiable) through a fallback function and the use of the `delegatecall` EVM instruction.We refer to the Proxiable contract (as per ERC-1822) with `implementation`.",

contracts/deployments/arbitrumSepoliaDevnet/DisputeTemplateRegistry_Implementation.json

+28-20
Large diffs are not rendered by default.

contracts/src/arbitration/interfaces/IArbitrableV2.sol

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ import "./IArbitratorV2.sol";
1212
interface IArbitrableV2 {
1313
/// @dev To be emitted when a dispute is created to link the correct meta-evidence to the disputeID.
1414
/// @param _arbitrator The arbitrator of the contract.
15-
/// @param _arbitrableDisputeID The identifier of the dispute in the Arbitrable contract.
15+
/// @param _arbitratorDisputeID The identifier of the dispute in the Arbitrator contract.
1616
/// @param _externalDisputeID An identifier created outside Kleros by the protocol requesting arbitration.
1717
/// @param _templateId The identifier of the dispute template. Should not be used with _templateUri.
1818
/// @param _templateUri The URI to the dispute template. For example on IPFS: starting with '/ipfs/'. Should not be used with _templateId.
1919
event DisputeRequest(
2020
IArbitratorV2 indexed _arbitrator,
21-
uint256 indexed _arbitrableDisputeID,
21+
uint256 indexed _arbitratorDisputeID,
2222
uint256 _externalDisputeID,
2323
uint256 _templateId,
2424
string _templateUri

contracts/test/evidence/index.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -259,12 +259,12 @@ describe("Home Evidence contract", async () => {
259259
});
260260
let receipt = await tx.wait();
261261

262-
let [_arbitrator, _arbitrableDisputeID, _externalDisputeID, _templateId, _templateUri] = getEmittedEvent(
262+
let [_arbitrator, _arbitratorDisputeID, _externalDisputeID, _templateId, _templateUri] = getEmittedEvent(
263263
"DisputeRequest",
264264
receipt
265265
).args;
266266
expect(_arbitrator).to.equal(arbitrator.address, "Wrong arbitrator.");
267-
expect(_arbitrableDisputeID).to.equal(0, "Wrong dispute ID.");
267+
expect(_arbitratorDisputeID).to.equal(0, "Wrong dispute ID.");
268268
expect(_templateId).to.equal(1, "Wrong template ID.");
269269
expect(_externalDisputeID).to.equal(evidenceID, "Wrong external dispute ID.");
270270

subgraph/package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"codegen:core": "graph codegen --output-dir core/generated/ core/subgraph.yaml",
1111
"build:core": "graph build --output-dir core/build/ core/subgraph.yaml",
1212
"test:core": "cd core && graph test",
13-
"clean:core": "graph clean --codegen-dir core/generated/ --build-dir core/build/ && rm core/subgraph.yaml.bak.*",
13+
"clean:core": "graph clean --codegen-dir core/generated/ --build-dir core/build/ ; rm core/subgraph.yaml.bak.*",
1414
"deploy:core:arbitrum-sepolia-devnet": "graph deploy --product subgraph-studio kleros-v2-core-devnet -l v$npm_package_version core/subgraph.yaml",
1515
"deploy:core:arbitrum-sepolia": "graph deploy --product subgraph-studio kleros-v2-core-testnet -l v$npm_package_version core/subgraph.yaml",
1616
"deploy:core:arbitrum": "graph deploy --product subgraph-studio kleros-v2-core-mainnet -l v$npm_package_version core/subgraph.yaml",
@@ -23,7 +23,7 @@
2323
"codegen:core-neo": "yarn codegen:core && graph codegen --output-dir core-neo/generated/ core-neo/subgraph.yaml",
2424
"build:core-neo": "graph build --output-dir core-neo/build/ core-neo/subgraph.yaml",
2525
"test:core-neo": "cd core-neo && graph test",
26-
"clean:core-neo": "graph clean --codegen-dir core-neo/generated/ --build-dir core-neo/build/ && rm core-neo/subgraph.yaml.bak.*",
26+
"clean:core-neo": "graph clean --codegen-dir core-neo/generated/ --build-dir core-neo/build/ ; rm core-neo/subgraph.yaml.bak.*",
2727
"deploy:core-neo:arbitrum-sepolia-devnet": "graph deploy --product subgraph-studio kleros-v2-coreneo-devnet -l v$npm_package_version core-neo/subgraph.yaml",
2828
"deploy:core-neo:arbitrum": "graph deploy --product subgraph-studio kleros-v2-coreneo -l v$npm_package_version core-neo/subgraph.yaml",
2929
"deploy:core-neo:local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 kleros/kleros-v2-coreneo-local --version-label v$(date +%s) core-neo/subgraph.yaml",
@@ -34,7 +34,7 @@
3434
"codegen:core-university": "yarn codegen:core && graph codegen --output-dir core-university/generated/ core-university/subgraph.yaml",
3535
"build:core-university": "graph build --output-dir core-university/build/ core-university/subgraph.yaml",
3636
"test:core-university": "cd core-university && graph test",
37-
"clean:core-university": "graph clean --codegen-dir core-university/generated/ --build-dir core-university/build/ && rm core-university/subgraph.yaml.bak.*",
37+
"clean:core-university": "graph clean --codegen-dir core-university/generated/ --build-dir core-university/build/ ; rm core-university/subgraph.yaml.bak.*",
3838
"deploy:core-university:arbitrum-sepolia-devnet": "graph deploy --product subgraph-studio kleros-v2-coreuni-devnet -l v$npm_package_version core-university/subgraph.yaml",
3939
"deploy:core-university:local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 kleros/kleros-v2-coreuni-local --version-label v$(date +%s) core-university/subgraph.yaml",
4040
"rebuild-deploy:core-university:local": "yarn update:core-university:local && yarn codegen:core-university && yarn build:core-university && yarn create:local kleros/kleros-v2-coreuni-local && yarn deploy:core-university:local",
@@ -46,7 +46,7 @@
4646
"codegen:drt": "graph codegen --output-dir dispute-template-registry/generated/ dispute-template-registry/subgraph.yaml",
4747
"build:drt": "graph build --output-dir dispute-template-registry/generated/ dispute-template-registry/subgraph.yaml",
4848
"test:drt": "cd dispute-template-registry && graph test ",
49-
"clean:drt": "graph clean --codegen-dir dispute-template-registry/generated/ --build-dir dispute-template-registry/build/ && rm dispute-template-registry/subgraph.yaml.bak.*",
49+
"clean:drt": "graph clean --codegen-dir dispute-template-registry/generated/ --build-dir dispute-template-registry/build/ ; rm dispute-template-registry/subgraph.yaml.bak.*",
5050
"deploy:drt:arbitrum-sepolia-devnet": "graph deploy --product subgraph-studio kleros-v2-drt-arbisep-devnet -l v$npm_package_version dispute-template-registry/subgraph.yaml",
5151
"deploy:drt:arbitrum-sepolia": "graph deploy --product subgraph-studio kleros-v2-drt-arbisep-testnet -l v$npm_package_version dispute-template-registry/subgraph.yaml",
5252
"deploy:drt:arbitrum": "graph deploy --product subgraph-studio kleros-v2-drt -l v$npm_package_version dispute-template-registry/subgraph.yaml",

web-devtools/src/app/(main)/dispute-template/page.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ const DisputeTemplateView = () => {
181181
const initialContext = {
182182
arbitrator: debouncedParams._arbitrator,
183183
arbitrable: debouncedParams._arbitrable,
184-
arbitrableDisputeID: debouncedParams._arbitrableDisputeID,
184+
arbitratorDisputeID: debouncedParams._arbitratorDisputeID,
185185
externalDisputeID: debouncedParams._externalDisputeID,
186186
templateID: debouncedParams._templateId,
187187
templateUri: debouncedParams._templateUri,
@@ -241,11 +241,11 @@ const DisputeTemplateView = () => {
241241
/>
242242
</StyledRow>
243243
<StyledRow>
244-
<StyledP>{"arbitrableDisputeID :"}</StyledP>
244+
<StyledP>{"arbitratorDisputeID :"}</StyledP>
245245
<Field
246246
type="text"
247-
name="_arbitrableDisputeID"
248-
value={params._arbitrableDisputeID?.toString()}
247+
name="_arbitratorDisputeID"
248+
value={params._arbitratorDisputeID?.toString()}
249249
onChange={handleFormUpdate}
250250
placeholder="0"
251251
/>

0 commit comments

Comments
 (0)