123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /* Import modules. */
- import BCHJS from '@psf/bch-js'
- import { binToHex } from '@nexajs/utils'
- // REST API servers.
- const BCHN_MAINNET = 'https://bchn.fullstack.cash/v5/'
- const runtimeConfig = useRuntimeConfig()
- // const jwtAuthToken = runtimeConfig.public.PSF_JWT_AUTH_TOKEN
- const jwtAuthToken = runtimeConfig.PSF_JWT_AUTH_TOKEN
- // console.log('jwtAuthToken', jwtAuthToken)
- // Instantiate bch-js based on the network.
- // FIXME https://github.com/Permissionless-Software-Foundation/jwt-bch-demo/blob/master/lib/fullstack-jwt.js
- const bchjs = new BCHJS({
- restURL: BCHN_MAINNET,
- apiToken: jwtAuthToken,
- })
- // console.log('bchjs', bchjs)
- const lang = 'english' // Set the language of the wallet.
- const aliceObj = {}
- const bobObj = {}
- const samObj = {}
- async function createWallets () {
- try {
- // create 256 bit BIP39 mnemonic
- const aliceMnemonic = bchjs.Mnemonic.generate(
- 128,
- bchjs.Mnemonic.wordLists()[lang]
- )
- console.log('aliceMnemonic', aliceMnemonic)
- const bobMnemonic = bchjs.Mnemonic.generate(
- 128,
- bchjs.Mnemonic.wordLists()[lang]
- )
- console.log('bobMnemonic', bobMnemonic)
- const samMnemonic = bchjs.Mnemonic.generate(
- 128,
- bchjs.Mnemonic.wordLists()[lang]
- )
- // root seed buffer
- const aliceRootSeed = await bchjs.Mnemonic.toSeed(aliceMnemonic)
- console.log('aliceRootSeed', aliceRootSeed)
- const bobRootSeed = await bchjs.Mnemonic.toSeed(bobMnemonic)
- const samRootSeed = await bchjs.Mnemonic.toSeed(samMnemonic)
- // master HDNode
- const aliceMasterHDNode = bchjs.HDNode.fromSeed(aliceRootSeed)
- const bobMasterHDNode = bchjs.HDNode.fromSeed(bobRootSeed)
- const samMasterHDNode = bchjs.HDNode.fromSeed(samRootSeed)
- // Use 245 derivation path, which is the BIP44 standard for SLP tokens.
- const aliceChildNode = aliceMasterHDNode.derivePath("m/44'/145'/0'/0/0")
- const bobChildNode = bobMasterHDNode.derivePath("m/44'/145'/0'/0/0")
- const samChildNode = samMasterHDNode.derivePath("m/44'/145'/0'/0/0")
- aliceObj.mnemonic = aliceMnemonic
- aliceObj.cashAddress = bchjs.HDNode.toCashAddress(aliceChildNode)
- aliceObj.legacyAddress = bchjs.HDNode.toLegacyAddress(aliceChildNode)
- aliceObj.slpAddress = bchjs.SLP.HDNode.toSLPAddress(aliceChildNode)
- aliceObj.WIF = bchjs.HDNode.toWIF(aliceChildNode)
- console.log('aliceObj', aliceObj)
- bobObj.mnemonic = bobMnemonic
- bobObj.cashAddress = bchjs.HDNode.toCashAddress(bobChildNode)
- bobObj.legacyAddress = bchjs.HDNode.toLegacyAddress(bobChildNode)
- bobObj.slpAddress = bchjs.SLP.HDNode.toSLPAddress(bobChildNode)
- bobObj.WIF = bchjs.HDNode.toWIF(bobChildNode)
- samObj.mnemonic = samMnemonic
- samObj.cashAddress = bchjs.HDNode.toCashAddress(samChildNode)
- samObj.legacyAddress = bchjs.HDNode.toLegacyAddress(samChildNode)
- samObj.slpAddress = bchjs.SLP.HDNode.toSLPAddress(samChildNode)
- samObj.WIF = bchjs.HDNode.toWIF(samChildNode)
- // Write out the basic information into a json file for other example apps to use.
- // fs.writeFileSync('alice-wallet.json', JSON.stringify(aliceObj, null, 2))
- // fs.writeFileSync('bob-wallet.json', JSON.stringify(bobObj, null, 2))
- // fs.writeFileSync('sam-wallet.json', JSON.stringify(samObj, null, 2))
- console.log(`
- Wallets created. To continue the example, you need to fund these wallets.
- Send 3000 sats to the Alice's address:
- ${aliceObj.cashAddress}
- Send 3000 sats to the Bob's address:
- ${bobObj.cashAddress}
- Send 3000 sats to the Sam's address:
- ${samObj.cashAddress}
- `)
- } catch (err) {
- console.error('Error in createWallets(): ', err)
- }
- }
- export default defineEventHandler((event) => {
- /* Set database. */
- const Db = event.context.Db
- // console.log('DB', Db)
- /* Set database. */
- const Wallet = event.context.Wallet
- // console.log('WALLET', Wallet)
- const walletPkg = {
- address: Wallet.address,
- publicKey: binToHex(Wallet.publicKey),
- assets: JSON.stringify(Wallet.assets, (key, value) =>
- typeof value === 'bigint' ? value.toString() + 'n' : value
- ),
- coins: JSON.stringify(Wallet.coins, (key, value) =>
- typeof value === 'bigint' ? value.toString() + 'n' : value
- ),
- mnemonic: Wallet.mnemonic,
- tokens: JSON.stringify(Wallet.tokens, (key, value) =>
- typeof value === 'bigint' ? value.toString() + 'n' : value
- ),
- aliceObj,
- bobObj,
- samObj,
- }
- /* Sanitize private details. */
- delete walletPkg.mnemonic
- /* Return wallet details. */
- return walletPkg
- })
|