Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Implements SNIP-12 #637

Merged
merged 45 commits into from
Dec 13, 2024
Merged

Implements SNIP-12 #637

merged 45 commits into from
Dec 13, 2024

Conversation

thiagodeev
Copy link
Collaborator

@thiagodeev thiagodeev commented Oct 14, 2024

Overview

This PR implements the SNIP-12 specification for typed structured data hashing and signing in StarkNet. The implementation follows SNIP-12 which defines a standard way to encode structured data for signing, similar to EIP-712 in Ethereum.

Key Features

  • Full implementation of TypedData structure and encoding
  • Support for both revision 0 and 1 of the specification
  • Comprehensive type system including:
  • Basic types (felt, shortstring, bool, etc.)
  • Complex types (arrays, structs, enums)
  • Special types (merkletree, string handling)
  • Domain separation for message signing
  • Structured hash calculation following the specification
  • JSON unmarshaling support for easy data input

Technical Details

  • Implements type encoding and hashing according to SNIP-12 rules
  • Supports nested structures and recursive type definitions
  • Handles both StarkNet Domain and custom message types
  • Includes comprehensive parameter validation
  • Maintains backward compatibility with existing StarkNet message signing
  • Testing
  • Unit tests cover all major functionality
  • Test vectors from the SNIP-12 specification
  • Edge cases and error conditions

Documentation

  • Added detailed comments explaining the implementation
  • Included references to the SNIP-12 specification
  • Documented all public methods and types

This implementation enables Starknet.go users to work with typed structured data in a standardized way, matching the behavior of other StarkNet implementations.

@thiagodeev thiagodeev force-pushed the thiagodeev/feature_snip-12 branch from dbe2cd6 to 43e67de Compare October 17, 2024 05:04
@thiagodeev thiagodeev force-pushed the thiagodeev/feature_snip-12 branch from 73bc0d6 to d3dca1d Compare October 17, 2024 05:27
@thiagodeev thiagodeev force-pushed the thiagodeev/feature_snip-12 branch from 7334761 to 7b5bbfc Compare October 24, 2024 14:10
@thiagodeev thiagodeev force-pushed the thiagodeev/feature_snip-12 branch from 30c8b2a to a1f7a01 Compare November 21, 2024 00:37
@thiagodeev thiagodeev force-pushed the thiagodeev/feature_snip-12 branch from 5141cfc to 4720826 Compare November 24, 2024 20:42
utils/keccak.go Outdated Show resolved Hide resolved
typedData/typedData.go Outdated Show resolved Hide resolved
typedData/typedData.go Outdated Show resolved Hide resolved
typedData/typedData.go Outdated Show resolved Hide resolved
thiagodeev and others added 4 commits December 4, 2024 11:21
Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>
Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>
utils/Felt.go Outdated Show resolved Hide resolved
typedData/typedData.go Outdated Show resolved Hide resolved
@thiagodeev thiagodeev merged commit 8ecf779 into main Dec 13, 2024
7 checks passed
@thiagodeev thiagodeev deleted the thiagodeev/feature_snip-12 branch December 13, 2024 13:30
thiagodeev added a commit that referenced this pull request Dec 19, 2024
* General semantic updates and EncodeType adjustment

* Improvements and bug fixes

* Implements typedData unmarshal

* Adds Message support on Unmarshal typedData

* Rename files and create types file

* Creates TestGeneral_CreateMessageWithTypes

* Clears some curve methods and adds Poseidon method

* Adds revision.go file, new Revision field of TypedData

* Basic implementation working with a rev 0 typedData

* Rename files

* Some code adjustments

* Adds new examples from starknet.js and implements new mock logic

* init function on revision package

* Adds first version of Validate feature

* Adds revision 1 support to encodeType

* Adds 'selector' support in encodeData

* restructs encodeData

* adds handleStandardTypes and handleArrays functions

* support to arrays, new types and new Domain unmarshal

* fixed support to bool, new example being tested

* fixes errors in encodeType, 'example_presetTypes' supported

* implements merkletree encode

* adds support to 'mail_StructArray' json example

* Fixes error inStringToByteArrFelt func, 'v1Nested' example passing

* Started to refactor 'encodeType' func

* Fixes bug with merkletree

* Creates the verifyType func

* implements enum encoding

* Removes the validation method, it will be added later

* creates big example for testing purpose

* removes the types file

* adds code comments and descriptions

* rename folder and file names

* creates typedData example and change READMEs

* Update utils/Felt.go

Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>

* Update utils/keccak.go

Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>

* addresses Rian's comment about GetMessageHash

* Revert enum wrong encode as it was fixed by starknet.js

* Creates ValidationSignature helper

* Removes the StrToFelt utility

* Improves 'chainId' validation

* Changes private fields of TypedData to public

---------

Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>
thiagodeev added a commit that referenced this pull request Dec 24, 2024
commit 9cb940b
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Thu Dec 19 23:10:28 2024 -0300

    Thiagodeev/rpcv08 final changes (#644)

    * Adjusts TransactionStatus

    * Adjusts EstimateFee

    * Fixes blockTest error

    * Adds GetStorageProof method (#635)

    * implement rpcv8 GetStorageProof method

    * Adds GetMessagesStatus method (#634)

    * Added GetMessagesStatus method

    * PR comment fixes

    * Fix MerkleNode type

    * Updates PendingBlockReader type

    * Updates ExecutionResources and remove ComputationResources

    * Fixes failing tests and improves Error() resp

    * Adds TODO comments and set a pointer to Marshal method

    * Thiagodeev/rpcv08 write methods, blockHeader and error 53 (#626)

    Update write methods, error 53 and block header for rpc08

    * Adjusts EstimateFee

commit 4ca79eb
Merge: 9007483 8ecf779
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Wed Dec 18 00:35:32 2024 -0300

    Merge branch 'main' into v0.8.0

commit 8ecf779
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Fri Dec 13 10:30:35 2024 -0300

    Implements SNIP-12 (#637)

    * General semantic updates and EncodeType adjustment

    * Improvements and bug fixes

    * Implements typedData unmarshal

    * Adds Message support on Unmarshal typedData

    * Rename files and create types file

    * Creates TestGeneral_CreateMessageWithTypes

    * Clears some curve methods and adds Poseidon method

    * Adds revision.go file, new Revision field of TypedData

    * Basic implementation working with a rev 0 typedData

    * Rename files

    * Some code adjustments

    * Adds new examples from starknet.js and implements new mock logic

    * init function on revision package

    * Adds first version of Validate feature

    * Adds revision 1 support to encodeType

    * Adds 'selector' support in encodeData

    * restructs encodeData

    * adds handleStandardTypes and handleArrays functions

    * support to arrays, new types and new Domain unmarshal

    * fixed support to bool, new example being tested

    * fixes errors in encodeType, 'example_presetTypes' supported

    * implements merkletree encode

    * adds support to 'mail_StructArray' json example

    * Fixes error inStringToByteArrFelt func, 'v1Nested' example passing

    * Started to refactor 'encodeType' func

    * Fixes bug with merkletree

    * Creates the verifyType func

    * implements enum encoding

    * Removes the validation method, it will be added later

    * creates big example for testing purpose

    * removes the types file

    * adds code comments and descriptions

    * rename folder and file names

    * creates typedData example and change READMEs

    * Update utils/Felt.go

    Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>

    * Update utils/keccak.go

    Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>

    * addresses Rian's comment about GetMessageHash

    * Revert enum wrong encode as it was fixed by starknet.js

    * Creates ValidationSignature helper

    * Removes the StrToFelt utility

    * Improves 'chainId' validation

    * Changes private fields of TypedData to public

    ---------

    Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>

commit 1c399f4
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Wed Dec 11 12:13:13 2024 -0300

    Merge PR #592 to main (#647)

    * fix::> introduced comman AddTransaction function in account package

    * fix::> replace all the instances of Add<Type>Transaction in example/test with AddTransaction

    * fix::> func name and doc changes made

    * fix::> account_test.go changed

    * fix::> examples error solved

    * fix::> Removed type assertions, created generic TransactionResponse struct, and transaction type converter

    * fix::> removed unnecessary lines

    * fix:> made required changes

    * fix::> removed unnecessary comments

    * fix::> renamed test function

    ---------

    Co-authored-by: Abhinav Prakash <abhinav.prakash319@gmail.com>
    Co-authored-by: Rian Hughes <ryanhughes4500@hotmail.com>

commit 9007483
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Wed Nov 6 11:26:01 2024 -0300

    starknet_getCompiledCasm (#642)

    * implement starknet_getCompiledCasm for RPCv8

commit 98d2b5c
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Mon Oct 28 11:24:53 2024 -0300

    Adds GetMessagesStatus method (#634)

    * Added GetMessagesStatus method

    * PR comment fixes

commit ae6e233
Author: Thiago Ribeiro <62709592+thiagodeev@users.noreply.github.com>
Date:   Mon Oct 28 07:20:01 2024 -0300

    Adds GetStorageProof method (#635)

    * implement rpcv8 GetStorageProof method

commit 75425d3
Author: thiagodeev <thiagodeev@gmail.com>
Date:   Mon Sep 30 10:08:19 2024 -0300

    Fixes blockTest error

commit de722c1
Author: thiagodeev <thiagodeev@gmail.com>
Date:   Mon Sep 30 10:07:56 2024 -0300

    Adjusts EstimateFee

commit b97a149
Author: thiagodeev <thiagodeev@gmail.com>
Date:   Mon Sep 30 09:31:31 2024 -0300

    Adjusts TransactionStatus
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants