JSPM

virto-signer

1.0.0
    • ESM via JSPM
    • ES Module Entrypoint
    • Export Map
    • Keywords
    • License
    • Repository URL
    • TypeScript Types
    • README
    • Created
    • Published
    • Downloads 2
    • Score
      100M100P100Q24840F
    • License MIT

    A signer for constructing a signed extrinsic using Pass-provided authenticators

    Package Exports

    • virto-signer
    • virto-signer/package.json

    Readme

    Virto Signer

    An implementation of Polkadot API's PolkadotSigner, that constructs a signed extrinsic which uses an implementation of Authenticator to retrieve the required deviceId and credentials.

    Usage

    import blake2b from "blake2b";
    import { Authenticator } from '@virtonetwork/signer';
    
    class DummyAuthenticator implements Authenticator {
      readonly deviceId: Uint8Array;
      readonly hashedUserId: Uint8Array;
    
      constructor(deviceId: Uint8Array, hashedUserId: Uint8Array) {
        this.deviceId = deviceId;
        this.hashedUserId = deviceId;
      }
      
      async credentials(challenge: Uint8Array): Promise<Uint8Array> {
        return mergeUint8(
          this.address,
          this.deviceId,
          // Dummy signature is blake2b_256(address ++ deviceId ++ challenge)
          blake2b(32).update(
            mergeUint8(this.address, this.deviceId, challenge)
          ).digest(),
        );
      }
    }
    
    // Then, signing a transaction
    import { Binary, createClient } from "polkadot-api";
    import { kreivo } from "@polkadot-api/descriptors";
    import { getWsProvider } from "polkadot-api/ws-provider/web";
    import { withPolkadotSdkCompat } from "polkadot-api/polkadot-sdk-compat";
    
    import { VirtoSigner } from '@virtonetwork/signer';
    
    const client = createClient(
      withPolkadotSdkCompat(getWsProvider("wss://kreivo.io"))
    );
    const api = client.getTypedApi(kreivo);
    
    const authenticator = new DummyAuthenticator(
      new Uint8Array(32).fill(0), // Device 0
      new Uint8Array(32).fill(0), // User 0
    );
    
    const tx = kreivoApi.tx.System.remark({
      remark: Binary.fromText("Hello, world!"),
    });
    
    await tx.signAndSubmit(new VirtoSigner(authenticator));