DApp创建本地钱包并实现签名转账(BSC,Polygon,ETH)

这篇具有很好参考价值的文章主要介绍了DApp创建本地钱包并实现签名转账(BSC,Polygon,ETH)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


DApp创建本地钱包并实现签名转账(BSC,Polygon,ETH)

1. 项目准备

  1. 安装ether.js
npm install --save ethers

引入ether.js:的三种方法

  • es3:
var ethers = require(‘ethers’);
  • es5/es6
const ethers = require(‘ethers’);
  • javascript/typescript es6
import ethers from ‘ethers’;

2. 钱包相关概念

这里默认为你已经了解 地址、密码、私钥、助记词、Keystore 之间的关系,所以不再过多介绍,只列出他们之间的关联:

地址 = 银行卡号

密码 = 银行卡密码

私钥 = 银行卡号+密码

助记词 = 银行卡号+密码

Keystore = 加密私钥

Keystore + 密码 = 私钥

3.随机创建一个钱包

使用到的ethers的Wallet类:

ethers.Wallet.createRandom()

createRandom 返回一个带有随机私钥的新钱包,由加密安全的熵源生成。如果当前环境没有安全的熵源,则会抛出错误。
使用此方法创建的钱包将具有助记词

  createNewWallet() {

    let walletRandom = ethers.Wallet.createRandom()
    // 钱包助记词对象
    let mnemonic = walletRandom.mnemonic
    
    //钱包助记词单词
    let phrase = mnemonic.phrase
    
    //path: "m/44'/60'/0'/0/0",
    let path = mnemonic.path
    
    //钱包地址
    let address = walletRandom.address
    
    //钱包公钥
    let publicKey = walletRandom.publicKey
    
    //钱包私钥
    let privateKey = walletRandom.privateKey
    
    //通过用户设置的密码生成keystore文件
    let password = "123456"
    walletRandom.encrypt(password).then((keystory_string) => {
      let keystory_json = JSON.parse(keystory_string)
      //钱包的keystore字符串
      this.keystory = keystory_string
      console.log(keystory_json)
    })
	
	//可以通过AES对称加密把钱包的助记词加密存储在本地
	let encryptPassword = "1234qwer"
    let encryptedPhrase = encryption(phrase, encryptPassword)
    console.log('加密后的助记词:', encryptedPhrase)
    
    let decryptedPhrase = decryption(encryptedPhrase, encryptPassword)
    console.log('解密后的助记词:', decryptedPhrase)
  }
import * as CryptoJS from 'crypto-js'

//数据对称加密
function encryption(data, password) {
  let encrypted = CryptoJS.AES.encrypt(data, password);
  return encrypted.toString()
}

//数据解密
function decryption(encrypted, password) {
  let decrypted = CryptoJS.AES.decrypt(encrypted, password);
  return decrypted.toString(CryptoJS.enc.Utf8);
}

4.根据助记词导入钱包

  ethers.Wallet.fromMnemonic( mnemonic [ , path , [ wordlist ] ] ) ⇒ Wallet

从助记短语中创建实例。

如果没有指定path,则使用以太坊的默认path路径(如m/44’/60’/0’/0/0).

如果不指定wordlist,则使用English Wordlist。

  async createWalletByPhrase() {
  	//默认路径
    let path = ethers.utils.defaultPath

	//要导入的钱包助记词
    let phrase =
      'able fee damage express dilemma visit fine claim similar attract awkward market'
    let mnemonic = ethers.Wallet.fromMnemonic(phrase)

	//钱包私钥
    let privateKey = mnemonic.privateKey
	
	//通过钱包私钥创建钱包实例
    let wallet = new ethers.Wallet(privateKey)
    
    //钱包公钥
    let publicKey = wallet.publicKey

	//钱包地址
    let address = wallet.address

	//通过用户设置的密码生成keystore文件
    let password = "123456"
    wallet.encrypt(password).then((keystory_string) => {
      let keystory_json = JSON.parse(keystory_string)
      let keystory = keystory_string
      console.log(keystory_json)
    })
  }

5.根据keystore导入钱包

ethers.Wallet.fromEncryptedJson( json , password [ , progress ] ) ⇒ Promise< Wallet >source

从加密的JSON钱包创建一个实例。

如果提供了进度,它将在解密期间被调用,其值介于0到1之间,表示一个完成进度。文章来源地址https://www.toymoban.com/news/detail-490655.html

  createWalletByKeystory() {
  	
  	//要导入的钱包keystore
    let keystory =
      '{"address":"df9e902814baba3ddc6b4a1ac9db11bc79eda07f","id":"60db3db5-ef64-400a-b25e-3615a9bdfa24","version":3,"crypto":{"cipher":"aes-128-ctr","cipherparams":{"iv":"f4c7ece791d112dc408537203aa2bb10"},"ciphertext":"acba3333e3d7078e2186ebd561c28bf0e4a8c105e4b1eec40bec20616441cc31","kdf":"scrypt","kdfparams":{"salt":"f1e8acd43868559c1ecda1c9b31489efd12f6c7c9302710b957a3b779dd6ec54","n":131072,"dklen":32,"p":1,"r":8},"mac":"e466473ae761f98b1f26354e27305ce23e41b5d5c8a5674b65675bdfbf848718"},"x-ethers":{"client":"ethers.js","gethFilename":"UTC--2023-03-25T03-36-38.0Z--df9e902814baba3ddc6b4a1ac9db11bc79eda07f","mnemonicCounter":"e4482220566b9a9f9d821c1352d1708f","mnemonicCiphertext":"7357682acae64479641611e17e1c6473","path":"m/44'/60'/0'/0/0","locale":"en","version":"0.1"}}'
      
     //改keystore创建时使用的密码
     let password = "123456"
      
    ethers.Wallet.fromEncryptedJson(keystory, password).then((wallet) => {
      console.log('wallet实例:', wallet)

	  //钱包地址
      let address = wallet.address
      //钱包公钥
      let publicKey = wallet.publicKey
      //钱包私钥
      let privateKey = wallet.privateKey
      //默认的路径
      let path = ethers.utils.defaultPath
    })
  }

6.签名转账

  async sendTransaction() {
  	//ETH
    // let network = 'goerli'
    // let contractAddress = ''

	//Polygon
    // let network = 'maticmum'
    // let contractAddress = ''

	//BSC
    // let network = 'https://bsc-dataseed.binance.org/'
    let network = 'https://data-seed-prebsc-1-s1.binance.org:8545/'
    let contractAddress = ''

	//使用Infura作为RPC使用
	//let projectId = ''
    // let provider = new ethers.providers.InfuraProvider(network, projectId)
    let provider = new ethers.providers.JsonRpcProvider(network);
    let privateKey = '0x0fb9146e20a3bd3497b47de967316c8aa7f83818ddc62429a24774f0df1f8065'
    let wallet = new ethers.Wallet(privateKey, provider)
    // let balance = await wallet.getBalance('latest')
    // console.log('余额:', balance)
    // console.log('余额:', ethers.utils.formatEther(balance))
    // console.log(await wallet.getChainId())
    // return
    /**
    //ETH转账
    let tx = {
      to: '',
      value: ethers.utils.parseEther('0.001'),
      chainId: ethers.BigNumber.from('5').toHexString()
    }
    let res = await wallet.sendTransaction(tx)
    console.log(res)
     */

    /**
     *
    //使用signers进行ERC20转账
    let contract = new ethers.Contract(contractAddress, GBK.abi, wallet)
    console.log(contract)
    let balance = await contract.balanceOf(wallet.address)
    balance = ethers.utils.formatEther(balance)
    console.log(balance)
    let res = await contract.transfer('', ethers.utils.parseUnits('1'))
    console.log(res)
     */
  }

到了这里,关于DApp创建本地钱包并实现签名转账(BSC,Polygon,ETH)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端Vue项目调用页面web3.js:连接metaMask钱包,(查询钱包ETH余额,查询代币余额,ETH转账,代币转账,代币授权,查询授权数量,计算价格)等功能

    这里分享下相关文档 1.web3.js中文文档 https://learnblockchain.cn/docs/web3.js/getting-started.html 2.metamask官方文档:https://docs.metamask.io/ 第一种方法:连接钱包 源码: 第二种方法: 连接钱包 安装依赖直接可以使用 源码: 其他功能: 1、在 mounted 中自动检测浏览器是否安装MetaMask钱包 2、查询

    2024年02月11日
    浏览(40)
  • 前端和Java验签以太坊钱包签名实现中心化登录

    相信做过一些dapp项目的小伙伴都知道,当dapp需要和中心化的业务系统交互时,怎么验证登录成了一个问题。要dapp输入登录账户密码就很奇怪,违背了设计初衷,不登录吧,中心化系统又没有安全可言。 故此需要一个特定的动作。只有当钱包持有人授权登录(连接钱包),前

    2024年04月23日
    浏览(20)
  • 探索数字未来:DApp钱包Defi引领新纪元

    ​小编介绍:10年专注商业模式设计及软件开发,擅长企业生态商业模式,商业零售会员增长裂变模式策划、商业闭环模式设计及方案落地;扶持10余个电商平台做到营收过千万,数百个平台达到百万会员,欢迎咨询。 随着区块链技术的飞速发展和普及,加密货币已经成为全

    2024年03月22日
    浏览(41)
  • 自学Vue开发Dapp去中心化钱包(三)

    本篇主要记录学习Vue并实际参与完结web3门户项目的经验和走过的弯路。拖了这么久才来还债,说项目忙那是借口,还是因为个人懒!从自学到实战Vue实际中间就1周的学习熟悉时间,学习不够深就会造成基础不稳,多次推翻重来的情况,从架子搭设到实际页面功能都存在这种

    2024年02月11日
    浏览(31)
  • DApp测试网络Ganache本地部署并实现远程连接

    Ganache 是DApp的测试网络,提供图形化界面,log日志等;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpolar内网穿透软件,即可比较简单实现远程或者不同局域网进行连接访问,下面简单概括设置和连接方法 进入官网:https://trufflesuite.com/ganach

    2024年02月04日
    浏览(27)
  • 使用Node.js和Web3.js实现链接MetaMask钱包并批量创建钱包并且批量发送代币

    MetaMask是一款基于浏览器的插件钱包,它可以安全地存储、发送和接收以太坊(Ethereum)代币。而Web3.js是一款JavaScript库,可以通过它连接以太坊区块链网络并管理以太坊钱包。 在此文中,我们将学习如何使用Node.js和Web3.js编程语言编写代码,实现链接MetaMask钱包并批量创建钱

    2024年02月08日
    浏览(62)
  • ganache私链部署智能合约+本地网络Dapp

    参考自(3条消息) 区块链投票应用:使用solidity+truffle+metamsk开发Dapp应用_一袋芋头的博客-CSDN博客下载了项目示例webpack之后   我们需要将里面的其他合约都删除,也可以直接删除这两个文件夹里的内容  然后就可以开始正片了(当然,你得先前就安装好环境) 开启ganache私链,

    2024年02月08日
    浏览(29)
  • flutter创建/导入区块链钱包,获取余额

    作为区块链行业小白刚接触区块链钱包几天,来开发钱包还是需要付出很多努力的.下面记录一下flutter框架下创建/导入区块链钱包,并获取余额 一、创建钱包: 钱包的创建分为三个步骤: 1、生成助记词 (1)、创建助记词: 需要用到bip39插件 (2)、创建方式: 2、助记词生成私钥 (1)、生

    2024年02月06日
    浏览(32)
  • 手动自己写了一个波场(Tron)本地网页版钱包

    最近由于项目需要,需要给每个用户分配一个充币地址,考虑到钱包安全性和方便管理,于是自己动手写了一个本地网页版的钱包,附上源代码跟大家交流下。 Github 源码地址 钱包和项目是分离的,项目通过鉴权访问钱包的接口,主要实现了以下功能: 1、可以导入助记词、

    2023年04月15日
    浏览(32)
  • 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片

    在本文中,你将构建一个 NFT 铸币机,并学习如何通过使用 Metamask 和 Web3 工具将你的智能合约连接到 React 前端,来创建一个NFT dApp。 我认为,对于具备 Web2 开发背景的开发者来说,最大的挑战之一是 弄清楚如何将你的智能合约连接到前端项目并与之交互。 通过构建 NFT 铸币

    2024年01月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包