Eth Hook for Svelte
useEthhook returns relevantstores andderived storesconnect: async (chainId?: number) => voidconnect to metamask, with desired side effects (connected = true, provider = injected....)connected: Writable<Bool>whether Metamask is connectedprovider: Writable<sProvider = ethers.providers.JrpcProvider | ethers.providers.Web3Provider>and thederived storesaccount: Readable<string>signer: Readable<ethers.Signer>- ...
import { useEth, IStore } from 'sveth'
export default const stores: IStore = useEth()
export const {provider, signer, address, chainId, getBalanceStore...} = stores
const balanceStore = getBalanceStore("0xabc123")<button on:click={() => connect()}> Connect Wallet </button>
<p>connected: {$connected}</p>
{#if $connected}
<p>chainId: {$chainId}</p>
<p>Account: {$account}</p>
<p>Balance: {balance}</p>
<p>Balance Hook: {$balanceStore}</p>
{/if}$storeto get value fromstores
import ContractCard from "sveth/src/components/ContractCard.svelte"
import { Contract } from "ethers"
import { Interface } from "@ethersproject/abi"
import ERC20ABI from "../abis/ERC20.json"
import store from "../stores/eth"
let contract = new Contract("0xabc123...", new Interface(ERC20ABI))
let contractChainId = 5 <ContractCard {contract} {store} {contractChainId} />- For more, see
example/
- some previous minor versions are used for testing CICD
- improve
<Contract {contract} {store} {chainId}>by prompting users to switch chain when chain is not matched - refactor
src/components/utils.tsisFunctionby not usinginstance ofwhich is not ideal according to the discussion in ethers
- improve
balancehooks and others by listening to blocks/events/txs- add dependency to
newblockstore may be a good ideas - add
contractChainIds to other related stores likebalance
- add dependency to
- improve
<Contract {contract} {store}>- parse input/output (BigNumber...)
- CSS styling support
const {reactive_contract} = useContract(address, abi, $signer)- build ts to js before publishing
- the package is a side project of mine, which I will put less effort from now on, feel free to contribute
- You can only use this package with typescript for now