feat: add system support for EIP-191, contracts support for EIP-(712,1271,6492)#294
feat: add system support for EIP-191, contracts support for EIP-(712,1271,6492)#294nksazonov merged 13 commits intofeat/v0.3.0from
Conversation
There was a problem hiding this comment.
Summary of Changes
Hello @nksazonov, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!
This pull request significantly upgrades the project's signature handling capabilities by standardizing signature representation across contracts, clearnode, and the SDK. It introduces native support for EIP-191, EIP-712, ERC-1271, and ERC-6492, enabling seamless interaction with a wider range of Ethereum wallets, including smart contract-based accounts. This foundational change improves flexibility, security, and future compatibility for the state channel system.
Highlights
- Unified Signature Representation: The core change involves transitioning from a
v,r,sstruct to a singlebytes(Solidity) orHex(Go/TypeScript) representation for signatures across the entire system, including smart contracts, clearnode, and the SDK. This simplifies signature handling and improves interoperability. - Expanded EIP Support: Smart contracts now natively support verification of signatures adhering to EIP-191 (signed messages), EIP-712 (typed data hashing), ERC-1271 (smart contract signature validation), and ERC-6492 (account abstraction). This enables compatibility with a wider range of Ethereum wallet types.
- Modular Adjudicator Design: A new
EIP712AdjudicatorBaseabstract contract has been introduced to standardize how adjudicator contracts retrieve EIP-712 domain separators from the channel implementation contract, enhancing modularity and extensibility for future adjudicator implementations. - Centralized Signature Verification: The
Utils.sollibrary now contains comprehensive and centralized logic for signature recovery and verification, capable of handling raw ECDSA, EIP-191, EIP-712, ERC-1271, and ERC-6492 signature formats. - Enhanced Test Coverage: A new integration test suite has been added to thoroughly validate the full channel lifecycle, specifically testing the system's robustness and interoperability with various mixed signature types.
Using Gemini Code Assist
The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.
Invoking Gemini
You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.
| Feature | Command | Description |
|---|---|---|
| Code Review | /gemini review |
Performs a code review for the current pull request in its current state. |
| Pull Request Summary | /gemini summary |
Provides a summary of the current pull request in its current state. |
| Comment | @gemini-code-assist | Responds in comments when explicitly tagged, both in issue comments and review comments. |
| Help | /gemini help |
Displays a list of available commands. |
Customization
To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.
Limitations & Feedback
Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments or fill out our survey to provide feedback.
You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.
Footnotes
-
Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩
There was a problem hiding this comment.
Code Review
This pull request refactors signature handling across the Go backend, Solidity contracts, and TypeScript SDK to support EIP-191, EIP-712, EIP-1271, and EIP-6492. The changes are systematic and the addition of new integration tests covering various signature schemes is a great improvement. One suggestion is to unify the Solidity pragma versions across all contracts for better maintainability. Overall, this is excellent work.
| @@ -2,17 +2,30 @@ | |||
| pragma solidity ^0.8.13; | |||
There was a problem hiding this comment.
There's an inconsistency in the Solidity pragma versions used across the contracts. This file uses ^0.8.13, while other files like Custody.sol and several new test files use ^0.8.26. Using different pragma versions can lead to unexpected behavior and makes the project harder to maintain. It's best practice to use a single, consistent version across all contracts.
I recommend standardizing on ^0.8.26 for all Solidity files to ensure consistency.
pragma solidity ^0.8.26;
* feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN
* feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs
* refactor(Types): replace Signature{v,r,s} with bytes
* style(contract): add empty lines at the end
* refactor(sdk): replace Signature{r,s,v} with Hex
* fix(NitroliteService): perform convertStateFromContract correctly
* fix(rpc): expect updated signature type from rpc
* style(sdk/rpc): remove ServerSignatureSchema var
* feat(sdk/rpc): add empty signatures array by default
* feat(sdk): add build:force command
* feat(sdk): remove npm build:force
* refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers
* feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif
* feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt
* feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState
f088cf8 to
99e64e2
Compare
…1271,6492) (#294) * feat: move erc7824 documentation to nitrolite (#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com>
…1271,6492) (#294) * feat: move erc7824 documentation to nitrolite (#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com>
…1271,6492) (#294) * feat: move erc7824 documentation to nitrolite (#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com>
…1271,6492) (#294) * feat: move erc7824 documentation to nitrolite (#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com>
* feat: add system support for EIP-191, contracts support for EIP-(712,1271,6492) (#294) * feat: move erc7824 documentation to nitrolite (#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> * feat: replace stateWalletClient with StateSigner (#297) * feat: redesign and improve joining channels by broker, refactor endpoints (#290) * feat: custody updates feat(custody): add EIP-191, EIP-712 signature support (#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs refactor(contract): migrate sig to bytes (#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end refactor(clearnode): replace Signature{r,s,v} with []byte (#283) refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force refactor(clearnode): define `Signature []byte` type (#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers fix(integration): tests sig migration (#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif feat(custody): add note about ephemeral final state style(contract): run forge fmt fix(clearnode/docs): remove legacy signature format feat(custody): eip-1271, eip-6492 sigs support (#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt feat(custody): add ability to create channel w/ server sig feat(contract/Custody): add ability to broker deposit in create * feat: clearnode updates feat: improve and simplify channel joining by broker drop join by broker feat: add create channel endpoint draft feat: use proper state format feat: code improvements and fix tests add doc feat: use state as encode state arg address comments feat: add tests for request create method update docs feat: refactor channel service tests rename encode state into encode state data feat: update response feat: unify channel operation responses feat: alling app session service structure to channel service update docs improve errors consistency * feat(rpc): add create_channel method and unify channel response types (#296) * feat: remove state hash from channel operation response * update erc-7824 docs * feat: include channel in channel operation response * fix: use chain id as key in network config * fix(Custody::join): allow 2 signatures * feat: add an optional session key for create_channel request * return state data as an encoded string * fix(Custody::join): add Server wallet * test(custody::join): broker auto-join tests (#303) * test(Custody::join): broker auto-join * refactor(contract/test): signState usage * refactor(Custody.t.sol): enhance broker auto join test name readability * feat: add sdk and integration support for simplified join (#304) --------- Co-authored-by: Sazonov Nikita <35502225+nksazonov@users.noreply.github.com> Co-authored-by: Max Pushkarov <mpushkarov@yellow.org> Co-authored-by: nksazonov <nsazonov@openware.com> Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> * refactor: API protocol (#285) * refactor: API protocol * fix: resolve issues after rebase * feat(Custody): update domain version to 0.3.0 * config(contract): set optimizer runs to 45 000 * docs(contract/deployments): add UAT 137, 11155111, PROD 137 * fix: add missing exports * bump sdk version * fix(sdk::RPCNetworkInfo): remove chain name * update uat release values * feat: migrate cerebro to v0.3.0 (#306) * fix: channel amount * feat(examples): remove snake, tictactoe, aura * fix(main-pr): remove test-examples action * build(contract): add separate config for linea * docs(contract): add v0.3.0 deployments for mainnet * add linea support & update prod config --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> Co-authored-by: Dmytro Steblyna <80773046+dimast-x@users.noreply.github.com> Co-authored-by: Max Pushkarov <mpushkarov@yellow.org> Co-authored-by: Anton Filonenko <phil@yellow.org>
* feat: add system support for EIP-191, contracts support for EIP-(712,1271,6492) (erc7824#294) * feat: move erc7824 documentation to nitrolite (erc7824#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (erc7824#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (erc7824#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (erc7824#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (erc7824#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (erc7824#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (erc7824#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (erc7824#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (erc7824#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> * feat: replace stateWalletClient with StateSigner (erc7824#297) * feat: redesign and improve joining channels by broker, refactor endpoints (erc7824#290) * feat: custody updates feat(custody): add EIP-191, EIP-712 signature support (erc7824#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs refactor(contract): migrate sig to bytes (erc7824#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end refactor(clearnode): replace Signature{r,s,v} with []byte (erc7824#283) refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (erc7824#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force refactor(clearnode): define `Signature []byte` type (erc7824#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers fix(integration): tests sig migration (erc7824#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif feat(custody): add note about ephemeral final state style(contract): run forge fmt fix(clearnode/docs): remove legacy signature format feat(custody): eip-1271, eip-6492 sigs support (erc7824#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt feat(custody): add ability to create channel w/ server sig feat(contract/Custody): add ability to broker deposit in create * feat: clearnode updates feat: improve and simplify channel joining by broker drop join by broker feat: add create channel endpoint draft feat: use proper state format feat: code improvements and fix tests add doc feat: use state as encode state arg address comments feat: add tests for request create method update docs feat: refactor channel service tests rename encode state into encode state data feat: update response feat: unify channel operation responses feat: alling app session service structure to channel service update docs improve errors consistency * feat(rpc): add create_channel method and unify channel response types (erc7824#296) * feat: remove state hash from channel operation response * update erc-7824 docs * feat: include channel in channel operation response * fix: use chain id as key in network config * fix(Custody::join): allow 2 signatures * feat: add an optional session key for create_channel request * return state data as an encoded string * fix(Custody::join): add Server wallet * test(custody::join): broker auto-join tests (erc7824#303) * test(Custody::join): broker auto-join * refactor(contract/test): signState usage * refactor(Custody.t.sol): enhance broker auto join test name readability * feat: add sdk and integration support for simplified join (erc7824#304) --------- Co-authored-by: Sazonov Nikita <35502225+nksazonov@users.noreply.github.com> Co-authored-by: Max Pushkarov <mpushkarov@yellow.org> Co-authored-by: nksazonov <nsazonov@openware.com> Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> * refactor: API protocol (erc7824#285) * refactor: API protocol * fix: resolve issues after rebase * feat(Custody): update domain version to 0.3.0 * config(contract): set optimizer runs to 45 000 * docs(contract/deployments): add UAT 137, 11155111, PROD 137 * fix: add missing exports * bump sdk version * fix(sdk::RPCNetworkInfo): remove chain name * update uat release values * feat: migrate cerebro to v0.3.0 (erc7824#306) * fix: channel amount * feat(examples): remove snake, tictactoe, aura * fix(main-pr): remove test-examples action * build(contract): add separate config for linea * docs(contract): add v0.3.0 deployments for mainnet * add linea support & update prod config --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> Co-authored-by: Dmytro Steblyna <80773046+dimast-x@users.noreply.github.com> Co-authored-by: Max Pushkarov <mpushkarov@yellow.org> Co-authored-by: Anton Filonenko <phil@yellow.org>
* feat: add system support for EIP-191, contracts support for EIP-(712,1271,6492) (erc7824#294) * feat: move erc7824 documentation to nitrolite (erc7824#272) * feat: move erc7824 documentation to nitrolite * feat: move GH actions to common scope * fix: comment GITHUB_TOKEN * feat(custody): add EIP-191, EIP-712 signature support (erc7824#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs * refactor(contract): migrate sig to bytes (erc7824#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end * refactor(clearnode): replace Signature{r,s,v} with []byte (erc7824#283) * refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (erc7824#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force * refactor(clearnode): define `Signature []byte` type (erc7824#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers * fix(integration): tests sig migration (erc7824#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif * feat(custody): add note about ephemeral final state * style(contract): run forge fmt * fix(clearnode/docs): remove legacy signature format * feat(custody): eip-1271, eip-6492 sigs support (erc7824#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt * feat: replace `stateHash` with `packedState` in message signing (erc7824#295) * feat(contract): replace stateHash with packedState in signing * test(contract): migrate to getPackedState * feat(contract): remove getStateHash * feat(clearnode): remove state_hash, rename EncodeState to Pack * feat(sdk): remove state_hash, add getPackedState * refactor(sdk): supply channelId and state to signState * docs(website): migrate Sig to Hex, add supported signature formats --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> * feat: replace stateWalletClient with StateSigner (erc7824#297) * feat: redesign and improve joining channels by broker, refactor endpoints (erc7824#290) * feat: custody updates feat(custody): add EIP-191, EIP-712 signature support (erc7824#257) * feat(custody): add EIP-191, EIP-712 support * feat(custody): correct EIP-712 sig impl * feat(utils): add POLA principle comment * feat(contract): add EIP712AdjudicatorBase * feat(contract): integrate EIP712AdjudicatorBase to supported adjs * fix(contract): tests with updated adjs * test(contract): EIP712AdjudicatorBase * test(contract): SimpleConsensus EIP191, EIP712 sigs * test(contract): Utils signatures * test(contract): Custody, SimpleConsensus integration tests for sigs refactor(contract): migrate sig to bytes (erc7824#279) * refactor(Types): replace Signature{v,r,s} with bytes * style(contract): add empty lines at the end refactor(clearnode): replace Signature{r,s,v} with []byte (erc7824#283) refactor(sdk): migrate `Signature{r,s,v}` to `Hex` (erc7824#284) * refactor(sdk): replace Signature{r,s,v} with Hex * fix(NitroliteService): perform convertStateFromContract correctly * fix(rpc): expect updated signature type from rpc * style(sdk/rpc): remove ServerSignatureSchema var * feat(sdk/rpc): add empty signatures array by default * feat(sdk): add build:force command * feat(sdk): remove npm build:force refactor(clearnode): define `Signature []byte` type (erc7824#287) * refactor(clearnode): define `Signature []byte` type * refactor(clearnode::RPCEntry): replace sig `[]string` with `[]Signature` * feat(clearnode/nitrolite): add Sigs2Strings, Strings2Sigs helpers fix(integration): tests sig migration (erc7824#289) * feat(docker-compose): add ability to pass logger visibility to clearnode * fix(clearnode): raw ECDSA sign and verify * fix(clearnode): try to extract req id on ummarshal error * fix(integration): update sig to new type * feat(sdk): change type of sig array to contain only Hex * refactor(clearnode): remove check on nil Req, zero-init instead * fix(clearnode:nitrolite): remove unintended side-effect of sig param modif feat(custody): add note about ephemeral final state style(contract): run forge fmt fix(clearnode/docs): remove legacy signature format feat(custody): eip-1271, eip-6492 sigs support (erc7824#293) * feat(contract): add ERC-1271,6492 support * test(contract/Utils.sol): add ERC-1271, 6492 tests * refactor(contract:Utils.t.sol): separate tests into contracts * refactor(UtilsHarness): do NOT expose constants * fix(contracts/adjudicators): use verifyStateSignature instead of just EOA sig * test(contract/Custody): add ERC-1271, 6492 sig to integration test * test(contract/Custody): add challenge with EIP-712, EIP-1271 tests * refactor(contract/Utils): reorder recoverStateEIP712Signer params for consistency * test(contract): remove console.logs * feat(contract): clarify Utils comments * refactor(contract): optimize Custody and Utils sig verification functions * style(contract): run forge fmt feat(custody): add ability to create channel w/ server sig feat(contract/Custody): add ability to broker deposit in create * feat: clearnode updates feat: improve and simplify channel joining by broker drop join by broker feat: add create channel endpoint draft feat: use proper state format feat: code improvements and fix tests add doc feat: use state as encode state arg address comments feat: add tests for request create method update docs feat: refactor channel service tests rename encode state into encode state data feat: update response feat: unify channel operation responses feat: alling app session service structure to channel service update docs improve errors consistency * feat(rpc): add create_channel method and unify channel response types (erc7824#296) * feat: remove state hash from channel operation response * update erc-7824 docs * feat: include channel in channel operation response * fix: use chain id as key in network config * fix(Custody::join): allow 2 signatures * feat: add an optional session key for create_channel request * return state data as an encoded string * fix(Custody::join): add Server wallet * test(custody::join): broker auto-join tests (erc7824#303) * test(Custody::join): broker auto-join * refactor(contract/test): signState usage * refactor(Custody.t.sol): enhance broker auto join test name readability * feat: add sdk and integration support for simplified join (erc7824#304) --------- Co-authored-by: Sazonov Nikita <35502225+nksazonov@users.noreply.github.com> Co-authored-by: Max Pushkarov <mpushkarov@yellow.org> Co-authored-by: nksazonov <nsazonov@openware.com> Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> * refactor: API protocol (erc7824#285) * refactor: API protocol * fix: resolve issues after rebase * feat(Custody): update domain version to 0.3.0 * config(contract): set optimizer runs to 45 000 * docs(contract/deployments): add UAT 137, 11155111, PROD 137 * fix: add missing exports * bump sdk version * fix(sdk::RPCNetworkInfo): remove chain name * update uat release values * feat: migrate cerebro to v0.3.0 (erc7824#306) * fix: channel amount * feat(examples): remove snake, tictactoe, aura * fix(main-pr): remove test-examples action * build(contract): add separate config for linea * docs(contract): add v0.3.0 deployments for mainnet * add linea support & update prod config --------- Co-authored-by: MaxMoskalenko <mx.msklnk@gmail.com> Co-authored-by: Dmytro Steblyna <80773046+dimast-x@users.noreply.github.com> Co-authored-by: Max Pushkarov <mpushkarov@yellow.org> Co-authored-by: Anton Filonenko <phil@yellow.org>
Moved from #278 .
Tasks:
struct Signature {v,r,s}withbytes signatureSignature {v,r,s}withHex signatureSignature {v,r,s}withHex signaturestateHashwithpackedStatefor message signing