Coder Social home page Coder Social logo

xbacked-dao / algorand-wallet-select Goto Github PK

View Code? Open in Web Editor NEW
22.0 5.0 5.0 6.4 MB

A single Web3 / Algorand provider solution for all Wallets

License: MIT License

JavaScript 79.36% HTML 19.37% CSS 1.27%
algorand react web3 crypto defi blockchain

algorand-wallet-select's Introduction

Algorand Wallet Select

A single Web3 / Algorand provider solution for all Wallets.

Introduction

AlgorandWalletSelect is an easy-to-use library to help developers add support for multiple providers in their apps with a simple customizable configuration.

By default AlgorandWalletSelect Library supports injected providers like (AlgoSigner, MyAlgoWallet, etc) and WalletConnect (OfficialAlgorandWallet, etc). You can also easily configure the library to support more wallets.

Projects using AlgorandWalletSelect

Open a PR to add your project to the list!

Usage

  1. Install the AlgorandWalletSelect NPM package
npm install --save @xbacked-dao/algorand-wallet-select
# OR
yarn add @xbacked-dao/algorand-wallet-select
  1. Add algorand-wallet-select to your Dapp as follows
import { WalletSelector } from "algorand-wallet-select";

const returnWallet = async (data) => {
  if (!!data) {
    console.log(data.connector.check());
    console.log(await data.connector.connect());
    console.log(data.connector.provider);
  }
};

const Template = (args) => (
  <div>
    <h1 className="ws-text-lg">Algorand Wallet Selector</h1>
    <p>Built with ๐Ÿ’š by xBacked</p>
    <WalletSelector returnWallet={returnWallet} />
  </div>
);

Optional: Configuring wallets to display

Simply do the following to only display the MyAlgo wallet. Valid wallets are myalgowallet, algosigner and walletconnect.

const Template = (args) => (
  <div>
    <h1 className="ws-text-lg">Algorand Wallet Selector</h1>
    <p>Built with ๐Ÿ’š by xBacked</p>
    <WalletSelector
      returnWallet={returnWallet}
      wallets=["myalgowallet"]
    />
  </div>
);

Adding a new provider

Do you want to add your provider to Web3Modal?

Note: This flow will be simplified in future updates.

All logic for supported providers lives inside src/wallets/providers.

  1. You must add a new connection definition to src/wallets/providers that matches the following signature (using MyAlgo as an example):
// Import the package.
import MyAlgo from '@randlabs/myalgo-connect';

// Default export defining the instance and the standard interface.
const ConnectToMyAlgo = () => {
  // Construct any required state for the connector.
  const myAlgoWallet = new MyAlgo();

  // Must return the following object.
  return {
    // Instance defined above.
    provider: myAlgoWallet,
    // Asynchronous function wrapping the connection method for the provider.
    connect: async () => await myAlgoWallet.connect(),
    // An optional function to check connection status if possible.
    check: () => (false),
  };
}

export default ConnectToMyAlgo;
  1. Add new connector to the default export in src/wallets/providers:
import algosigner from "./algosigner";
import myalgowallet from "./myalgowallet";
import walletconnect from "./walletconnect";
// Import here and export below.
import myNewWallet from "./myNewWallet";

export {
  algosigner,
  myalgowallet,
  walletconnect,
  myNewWallet,
};
  1. Add a .png or .svg as a logo for the added wallet connector to src/wallets/logos

  2. Depending on the type of connector, create an entry in either the src/wallets/injected.js file or the src/wallets/providers.js file.

  3. After testing that the logo is displaying correctly, and you are able to return the valid instance create a pull request to this repository!

License

MIT

algorand-wallet-select's People

Contributors

awoldes avatar jcastrejone avatar mitchbne avatar thinc5 avatar tomxbacked avatar xroark avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

algorand-wallet-select's Issues

Unified wallet API

The real value in a package like this is through providing a somewhat unified API, to abstract away wallet particulars allowing the front end code to be less specific.

Expose method to get a `TransactionSigner` callback

With the new AtomicTransactionComposer a new type was defined to allow easier signing of transactions as part of an atomic group.

Example:
https://github.com/algorand/js-algorand-sdk/blob/develop/src/signer.ts#L23-L35

At the moment this is not supported in wallets directly but it is something you can provide here.

I just added a method getSigner to the one I'm maintaining. For reference:
https://github.com/barnjamin/algorand-session-wallet/blob/main/src/index.ts#L93-L99

and API is something like

    const comp = new algosdk.AtomicTransactionComposer()
    const pay_txn = getPayTxn(suggested, sw.getDefaultAccount())

    comp.addTransaction({txn:pay_txn, signer:sw.getSigner()})

    const result = await comp.execute(client, 2)
    console.log(result)

Ping me with any questions!

Incorrect main path

Howdy team, it looks like the main path inside package.json is wrong. It should be src/index.js

In the package.json file, I'm proposing you modify the line "main": "index.js" to "main": "src/index.js"

Love it

First, thank you for open sourcing this! I just found it and it looks awesome!

I haven't had a chance to try it out yet but the qr code modal provided by WalletConnect doesn't (or didn't?) support iOS algorand wallet. I had to change mine to use the algorand fork.

Also the "here" link on the readme is 404ing currently.

Thanks again! I'm going to start referring folks here

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.