Package Exports
- @klaytn/ethers-ext
- @klaytn/ethers-ext/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@klaytn/ethers-ext) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Ethers.js Extension for Klaytn
Ethers.js Extension for Klaytn offers:
- Drop-in replacement to
ethers.Walletthat handles both Ethereum and Klaytn transaction types involving AccountKey and TxTypes. - Drop-in replacement to
ethers.JsonRpcProviderthat provides accesses to both Ethereum RPCs and Klaytn-specific RPCs. - Drop-in replacement to
ethers.Web3Providerto work with both MetaMask (window.ethereum) and Kaikas (window.klaytn)
Install
Node.js
- Install
npm install --save @klaytn/ethers-ext
- ESM or TypeScript
import { Wallet, JsonRpcProvider } from "@klaytn/ethers-ext"; const provider = new JsonRpcProvider("https://public-en-baobab.klaytn.net"); const wallet = new Wallet("<private key>", provider);
- CommonJS
const { Wallet, JsonRpcProvider } = require("@klaytn/ethers-ext"); const provider = new JsonRpcProvider("https://public-en-baobab.klaytn.net"); const wallet = new Wallet("<private key>", provider);
Browser
It is not recommended to use CDNs in production, But you can use below for quick prototyping.
<script src="https://cdn.jsdelivr.net/npm/@klaytn/ethers-ext@latest/dist/ethers-ext.bundle.js"></script>
<script>
const provider = new ethers_ext.providers.Web3Provider(window.klaytn);
</script>Usage
Class extension design
If diagram does not render, view it here
classDiagram
namespace ethers {
class ethers_Signer["ethers.Signer"] {
provider
checkTransaction()
populateTransaction()
sendTransaction()
}
class ethers_Wallet["ethers.Wallet"] {
connect()
getAddress()
signMessage()
signTransaction()
static fromEncryptedJson()
static fromEncryptedJsonSync()
}
class ethers_JsonRpcSigner["ethers.JsonRpcSigner"] {
connect()
connectUnchecked()
getAddress()
signMessage()
signTransaction()
sendUncheckedTransaction()
_legacySignMessage()
_signTypedData()
override sendTransaction()
}
class ethers_Provider["ethers.Provider"] {
}
class ethers_BaseProvider["ethers.BaseProvider"] {
}
class ethers_JsonRpcProvider["ethers.JsonRpcProvider"] {
getSigner()
send()
}
class ethers_Web3Provider["ethers.Web3Provider"] {
override send()
}
class ethers_ExternalProvider["ethers.ExternalProvider"] {
isMetaMask
request()
}
}
namespace ethers_ext {
class Wallet {
override getAddress()
override checkTransaction()
override populateTransaction()
override signTransaction()
override sendTransaction()
override static fromEncryptedJson()
override static fromEncryptedJsonSync()
signTransactionAsFeePayer()
sendTransactionAsFeePayer()
static fromEncryptedJsonList()
static fromEncryptedJsonListSync()
}
class JsonRpcSigner {
override connectUnchecked()
override getAddress()
override signMessage()
override checkTransaction()
override populateTransaction()
override signTransaction()
override _legacySignMessage()
override _signTypedData()
override sendTransaction()
override sendUncheckedTransaction()
}
class JsonRpcProvider {
admin
debug
governance
klay
net
personal
txpool
override getSigner()
override send()
}
class Web3Provider {
admin
debug
governance
klay
net
personal
txpool
override getSigner()
}
class ExternalProvider {
isKaikas
}
}
ethers_Signer <|-- ethers_Wallet
ethers_Signer <|-- ethers_JsonRpcSigner
ethers_Wallet <|-- Wallet
ethers_JsonRpcSigner <|-- JsonRpcSigner
ethers_Provider <|-- ethers_BaseProvider
ethers_BaseProvider <|-- ethers_JsonRpcProvider
ethers_JsonRpcProvider <|-- ethers_Web3Provider
ethers_JsonRpcProvider <|-- JsonRpcProvider
ethers_Web3Provider <|-- Web3Provider
ethers_ExternalProvider <|-- ExternalProvider