Neatly Prepared Mustache

    @identity.com/prove-solana-wallet
    TypeScript icon, indicating that this package has built-in type declarations

    0.2.5 • Public • Published

    Prove-Solana-Wallet

    This library proves ownership of a Solana wallet to off-chain verifiers.

    It is compatible with standard browser wallet adapters, such as sol-wallet-adapter, and can be extended to others.

    Install

    npm install @identity.com/prove-solana-wallet

    or

    yarn add @identity.com/prove-solana-wallet

    Usage

    Prove ownership of a keypair

    Prover side:

    const {prove} = require('@identity.com/prove-solana-wallet');
    const proof = await prove(myKeypair);

    Verifier side:

    const {verify} = require('@identity.com/prove-solana-wallet');
    await verify(proof, expectedPublicKey);

    Prove ownership of an external wallet (e.g. sol-wallet-adapter). See here for more details.

    Prover side:

    const {prove} = require('@identity.com/prove-solana-wallet');
    import Wallet from "@project-serum/sol-wallet-adapter";
    
    const providerUrl = 'https://www.sollet.io';
    const wallet = new Wallet(providerUrl);
    wallet.on('connect', async (publicKey) => {
      // once the wallet is connected, we can prove ownership
      const signer = (transaction:Transaction) => wallet.signTransaction(transaction);
    
      const proof = await prove(myKeypair);
    });

    Verifier side:

    const {verify} = require('@identity.com/prove-solana-wallet');
    await verify(proof, expectedPublicKey);

    Details

    The prove() function generates a zero-value transaction, and signs it with the wallet private key. For the transaction to be verified by the verify() function, it must:

    • have ony one instruction: SystemProgram.transfer
    • be zero-value
    • be self-to-self (i.e the sender and recipient are the same)
    • have a recent blockhash on mainnet
    • but not be broadcast to mainnet

    These measures increase the security by reducing the likelihood that an attacker can either coerce the wallet owner to sign a transaction or intercept a broadcast one.

    Configuration

    The prove and verify functions can be configured as follows:

    cluster

    Default: mainnet-beta

    The cluster that should be used when generating and verifying proofs

    commitment

    Default: confirmed

    When checking that a proof transaction has not been transmitted, the commitment to be used, i.e. the degree to which the transaction is finalised by the network

    supportedClusterUrls

    Optional Default: empty

    If the cluster is not a standard solana public cluster, this map provides the cluster URL to connect to. Use this when the proof may contain a cluster that is not recognised by solana's clusterApiUrl function.

    Keywords

    none

    Install

    npm i @identity.com/prove-solana-wallet

    DownloadsWeekly Downloads

    7,408

    Version

    0.2.5

    License

    MIT

    Unpacked Size

    265 kB

    Total Files

    17

    Last publish

    Collaborators

    • diosakhilleus
    • chriteixeira
    • rado0x54
    • araptarchis
    • mitchcivic
    • identity.com-ci
    • dankelleher
    • flippiescholtz
    • kevinhcolgan
    • pbshoemaker
    • tyronemichael
    • lucmir
    • william-identity