The goal of this project is to make a TypeScript implementation of off-chain message signing that's compatible with the solana
cli.
This allows people to verify keypairs they can access with the solana
cli without having to import that keypair into a wallet.
- We use TypeScript to create a message and a command to sign it.
- The user executes the command to sign the message and the signature is printed to the console.
- The user can then use the
solana
cli to verify the signature. - We can use the TypeScript implementation to verify the signature as well.
Steps 2 and 3 are already implemented in the solana
cli. We need to implement steps 1 and 4.
This project implements a basic setup that prompts for the public key and prints the instructions.
You can run this using the following command:
pnpm build && pnpm start
The logic must be implemented in the files ./src/lib/create-challenge.ts
and ./src/lib/verify-signature.ts
.
Both files have a test suite that must be implemented and pass, as well as a complete test in ./src/e2e.spec.ts
.
You can use the fixture keypair in ./src/fixtures/test-keypair.json
to sign the messages in your tests.
This example uses the fixture keypair in ./src/fixtures/test-keypair.json
to sign the message test
.
$ solana sign-offchain-message -k ./src/fixtures/test-keypair.json 'test'
3pWh55arC5NykkrQS1g2JFJAjZRULPB6jamE9sCsMQ99HcgA462ji4yZHekczgupPcoAFhw3P7XdYfsMcbDv2Rjd
To verify the signature using the solana
cli:
$ solana verify-offchain-signature -k ./src/fixtures/test-keypair.json 'test' 3pWh55arC5NykkrQS1g2JFJAjZRULPB6jamE9sCsMQ99HcgA462ji4yZHekczgupPcoAFhw3P7XdYfsMcbDv2Rjd
Signature is valid
The goal is to make a TypeScript implementation compatible with the solana
cli to let people verify keypairs the want to access with solana
cli, not by importing the keypair to a wallet.