nodejs
文章平均质量分 64
sanqima
这个作者很懒,什么都没留下…
展开
-
使用Git bash切换Gitee、GitHub多个Git账号
Git是分布式代码管理工具,使用命令行的方式提交commit、revert回滚代码。这里介绍使用Git bash软件来切换Gitee、GitHub账号。假设在gitee.com上的邮箱是alice@foxmail.com 、用户名为alice;在github上的邮箱是bob@foxmail.com、用户名为bob。首先要有alice、bob的公钥、私钥文件,然后把公钥配置到网站的SS里,在git bash里激活并授权该账号,最后配置~/.ssh/config文件,保存其账号、网段信息等。原创 2023-11-24 00:12:16 · 3615 阅读 · 2 评论 -
解决“hardhat unresolved libraries or missing links“问题
今天在Hardhat测试合约,发现"unresolved libraries"问题,如图(1)所示: 图(1) 报"库合约没有链接" 出现这种现象的原因是:若library是自定义的库文件,在部署合约时,需要手动link到合约里。 解决方法:先部署库合约,得到库合约地址,将这个地址放到业务合约的libraries列表即可。这个库合约必须要有public函数可供外部调用,不能使用函数全为internal的库合约(因为internal的库合约无法导出)。 // 1原创 2022-02-26 16:45:58 · 1087 阅读 · 3 评论 -
UniswapV2路由合约的函数选择器和事件选择器
UniswapV2路由合约UniswapV2Router02,其继承于IUniswapV2Router02, 而IUniswapV2Router02又继承于IUniswapV2Router01。路由合约用于在原Token与目标Token之间找到一条兑换路径,比如 TokenA --> TokenB --> TokenC,把TokenA兑换TokenC,需要通过TokenB来继续转接。实际是2个交易对: (TokenA,TokenB),(Token B,TokenC) 。路由合约的继承图表如下:原创 2021-12-22 16:33:10 · 881 阅读 · 0 评论 -
UniswapV2工厂合约里的函数选择器和事件选择器
UniswapV2工厂合约 UniswapV2Factory,继承于IUniswapV2Factory,如图(1)所示,用于创建配对合约。 图(2) UniswapV2Factroy工厂合约的继承图表UniswapV2Factory函数选择器和事件选择器functionselectconstructor(address)0xf8a6c595allPairs(uint256)0x1e3dd18ballPairsLength()0x574f2ba3原创 2021-12-22 16:02:20 · 418 阅读 · 0 评论 -
UniswapV2配对合约里的函数选择器与事件选择器
UniswapV2的配对合约UniswapV2Pair,继承IUniswapV2ERC20、IUniswapV2Pair这2个合约,如图(1)所示。UniswapV2ERC20 是ERC20合约,用于设置配对合约的Token名称、精度、符号等。IUniswapV2Pair用于获取交易对的价格、储备量、token0、token1的地址等 配对合约的继承表IUniswapV2ERC20的函数选择器、事件选择器functionselectDOMAIN_SEPARAT原创 2021-12-22 15:33:49 · 796 阅读 · 0 评论 -
ethers计算函数选择器与事件选择器
在Solidity中,函数选择器是对函数头进行keccak256()计算取前4个字节,事件选择器是对事件头进行keccak256()计算取完整的32字节。在ethers.js里对这个keccak256进行了封装,变成了ethers.utils.id()原创 2021-12-22 10:49:19 · 1176 阅读 · 0 评论 -
hardhat同时编译不同版本的智能合约
hardhat可以同时编译不同版本的.sol智能合约,只需要在hardhat.config.ts或hardhat.config.js配置文件的compilers/version字段添加对应的版本号即可。比如,同时编译 solc-v0.4.26、v0.5.12、v0.6.12的sol智能合约,则新增一个compilers/version字段,在该字段里添加版本号即可。这里以hardhat v2.6.5为例进行说明。修改前 require("@nomiclabs/hardhat-waffle");原创 2021-12-07 23:48:08 · 5259 阅读 · 0 评论 -
解决“Timeout of 2000ms exceeded“问题
在nodejs测试中,有时弹出"Timeout of 2000ms exceeded"错误,如图(1)所示。出现这种情况的原因是,nodejs默认加载时间为2000ms,若加载一个库或者搜索一个文件超过2000ms,则会报错。 解决方法:将package.json的scripts字段里,添加一个超时时间 --time XXX,把它改大一点,比如,改成30000000。原创 2021-11-26 00:06:52 · 16430 阅读 · 0 评论 -
使用ethers.js执行读函数与写函数
ethers.js是一个简洁的以太坊操作库,使用它非常方便的执行读函数、写函数。下面介绍使用ethers.js执行CountOne.sol里的读写函数。原创 2021-11-19 16:35:27 · 5764 阅读 · 1 评论 -
在json里查看Solidity的版本
智能合约使用truffle compile、npx hardhat compile、brownie compile这3种工具编译后,都会得到一个json文件,该json文件有合约的abi、bytecode、compiler等字段。 - abi 应用程序二进制接口,是合约提供外界调用的接口。 - bytecoe 字节码,合约代码编译之后得到的字节码,最后会部署到链上。 - compiler 是Solidtiy的编译信息,包含链分叉的版本、solc版本、是否优化。原创 2021-11-09 16:51:11 · 3405 阅读 · 0 评论 -
brownie部署与测试智能合约
brownie是一种Python语言的开发与测试框架,它可以部署.sol、.py格式的智能合约。- 完全支持Solidity和Vyper- 通过pytest进行智能合约测试,包括基于跟踪的覆盖率评估- 通过hypothesis进行基于属性和状态的测试- 强大的调试工具,包括python风格的跟踪和自定义错误字符串- 内置控制台,用于快速项目互动- 支持ethPM软件包原创 2021-11-09 16:14:37 · 2119 阅读 · 2 评论 -
ERC20标准函数简介与测试方法
ERC20是以太坊上的一种合约标准,它包含5个函数、2个事件。具体如下:- totalSupply() 代币的总量- balanceOf() 某个地址上的余额- transfer() 发送代币- allowance() 额度、配额、津贴- approve() 批准给某个地址一定数量的代币(授予额度、授予津贴)- transferFrom() 提取approve授予的代币(提取额度、提取津贴)- Transfer() 代币发送事件- Approval() 额度批准事件原创 2021-11-04 16:42:49 · 4563 阅读 · 0 评论 -
解决“export NODE_ENV=test”不是外部或内部命令
今天在mocha编程中,运行测试ts脚本,报"export NODE_ENV=test"不是外部命令、内部命令,如图(1)所示。问题原因,export是Linux上的命令,在windows不支持,需要将它改成SET \"NODE_ENV=test\"。即用set代替export。原创 2021-11-01 23:08:51 · 649 阅读 · 0 评论 -
ethers.js读写合约里的状态变量
在ethers.js里,对合约状态变量的访问有2种方式:只读方式和读写方式。当访问合约里的状态变量时,需要知道该合约的地址、abi、provider(或signer)。只读方式,只能读取状态变量;而读写方式,既可以读取状态变量,还可以修改状态变量。原创 2021-10-31 17:30:57 · 6638 阅读 · 0 评论 -
监听Solidity合约事件
在ethers.js里,使用contractWithSigner.on()的方式,监听合约的某个事件或者地址上的交易。合约的事件,会通过emit event的方式发出,使用contractWithSigner.on() 注册了该事件,就可以实现监听了。下面以监听EventValue.sol里的ValueChanged事件为例,进行说明。原创 2021-10-24 12:50:41 · 4972 阅读 · 0 评论 -
解决“ethereumjs-abi.git无法访问“问题
今天,在使用sudo yarn install拉取依赖包时,报"无法访问 'https://github.com/ethereumjs/ethereumjs-abi.git/'"问题,如图(1)所示。出现这种情况的原因:yarn.lock文件里的dependencies字段的ethereumjs-abi 没有指定版本号。解决方法: <font color="red">给dependencies的ethereumjs-abi 指定一个版本号即可,比如 0.6.8。原创 2021-10-12 11:15:28 · 5030 阅读 · 9 评论 -
推送本地项目到gitee
gitee是国内仿造github创造一个开源代码托管与版本管理平台,它的很多命令与github非常类似。下面介绍,将本地项目推送到gitee。这里以threesmart工程为例,进行说明。原创 2021-10-04 23:21:26 · 2243 阅读 · 0 评论 -
解决“node-gyp command failed“问题
今天,在MacOS终端,使用npm install,发现"npm ERR! command failed"错误,如图(1)所示。出现这种现象的原因是,当前的nodejs的版本是build版本,或者版本太高,需要改成一个LTS版本,比如,node -v14.18。原创 2021-09-29 10:16:57 · 3698 阅读 · 1 评论 -
vscode切换Solidity的编译版本
在vscode中,先安装solidityhe、solidity Extends、solidity debugger这3个插件,然后设置Solidity的版本号。这里以设置0.7.3版本为例,进行说明。原创 2021-09-26 00:24:58 · 4871 阅读 · 1 评论 -
win10安装nodejs、truffle等软件
本文介绍nodejs、truffle、yarn等软件,在win10上的安装方法。原创 2021-09-25 20:42:04 · 771 阅读 · 0 评论 -
解决React “name can no longer contain capital letters“问题
react创建工程时,工程名称要全部小写,否则无法创建。可以使用全部小写+蛇形命名法来区别不同的工程。比如,oneapp 加一个横杆,改成 one-app。原创 2021-09-24 16:42:08 · 3014 阅读 · 0 评论 -
Linux安装NVM
NVM 是一个非常方便的node包管理工具,可以实现在NodeJS 之间进行切换。 下面,介绍用root权限安装NVM工具。到2021年7月,nvm的最新版本为v0.38。1、下载nvm安装包 官网地址: https://github.com/nvm-sh/nvm/archive/refs/tags/v0.38.0.tar.gz 个人地址: https://pan.baidu.com/s/1NqUstNL1jZ9CSPD0OBgMPA 提取码:bwfv2、解压nvmc原创 2021-07-27 00:23:04 · 15019 阅读 · 0 评论 -
jquery通过id来查找控件
在网页编程中,常常需要查找某个控件,可以通过该控件的id、tag、class、属性来查找到它。这里介绍在jquery里通过id来查找控件。1、新建一个js工程名称为login 打开InterlliJ IDEA 2020 --> New Project --> JavaScript --> JavaScript --> JavaScript --> Project name: login --> Ok。2、安装jquery 2.2.4 点击Int原创 2021-02-15 14:56:51 · 1196 阅读 · 0 评论 -
promise的使用与简写
在JS里代码执行大都是单线程的,如果要在一个线程中处理多个事物,就需要使用异步回调。既可以通过回调函来实现异步回调,也可以使用Promise机制来实现异步回调。 下面介绍,js里Promise的使用和简写。1、需求用Promise来判断[0,100)之间的数,若数小于50,则返回OK,否则返回failed。2、初始代码 //one.js function test(resolve,reject) { var num = Math.random()*1原创 2021-02-10 16:24:50 · 1062 阅读 · 0 评论 -
Intellij IDEA里的md5验证
在网页登录界面里,常常需要输入用户的账户和密码,这个密码会加盐之后,再取MD5,然后,与数据库里的MD5进行比较,若相同说明密码是正确的,若不同说明密码错误。 下面介绍,在Intellij IDEA2020里安装js有关的md5库和使用方法。1、新建一个js工程名称为login 打开InterlliJ IDEA 2020 --> New Project --> JavaScript --> JavaScript --> JavaScript --> P原创 2021-02-10 11:24:34 · 1460 阅读 · 0 评论 -
js里的对象类型typeof
js的对象类型主要分为两大类:基本数据类型、包装数据类型;1、基本数据类型 typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof undefined; // 'undefined' typeof Math.abs; // 'function' typeof null; // 'obje原创 2021-02-09 10:27:06 · 823 阅读 · 0 评论 -
js输出100以内的质数
1、质数的定义 若一个整数,只能被1和自身整除,则这个数就是质数。 注意,1不是质数,也不是偶数。2、判断质数的方法2.1 对一个整数n开平方,得到sqrt(n)2.2 任取[2,sqrt(n)]里的一个整数来除n,若能整除,说明n不是质数。若没有一个整除的,则n是质数。3、js语言实现质数判断 //5.1) 判断质数 function getPrimes(arr) { return arr.filter(function (ele) {原创 2021-02-07 17:39:02 · 3477 阅读 · 0 评论 -
ES6里的字段解析
在ES6中,一个结构体有多个属性,这些属性也叫字段,我们既可以用名称来解析,也可以用普通函数来解析,还可以用箭头函数(arrow函数)来解析。下面以获取结构体person里的name字段为例。 const person = { name:"mack", age:30, language:['php','js','golang'] }1、使用名称来解析 //1) 直接通过索引名称来解析 console.log("hel原创 2021-01-31 15:44:24 · 237 阅读 · 0 评论 -
ES6里的箭头函数
ES6里的箭头函数,简化了函数的拼写,语法更易读,形式更直观。下面介绍单参函数、多参函数、无参函数等的箭头写法。1、单参函数 //1) 原版 var print = function (obj) { console.log(obj) } print("hello") //2) 箭头版 var print2 = obj => console.log(obj) print2("world")2、多参函数 //1) 原原创 2021-01-31 15:24:30 · 149 阅读 · 0 评论 -
解决“npm WARN requires a peer of XXX“问题
在NodeJs开发中,往往需要安装各种依赖包,而有时候这些依赖包版本更新了或者改成了另外一个包名,导致npm install会报“require a peer of XXX”之类的warning。解决方法,就是缺啥就补啥,命令如下:npm install --save-dev "XXX" 比如,warning报“requires a peer of eslint@>=6.2.2 ”,如图(1)所示:图(1) warning报"eslint@>=0.62.2" 依赖包缺原创 2020-11-12 14:54:14 · 61263 阅读 · 9 评论 -
win10平台yarn工具的安装与环境配置
Yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的JS 包管理工具 ,正如官方文档中写的,Yarn 是为了弥补 npm 的一些缺陷而出现的。yarn和npm一样,都可以用来添加和删除某个软件包,但yarn比npm安装软件包的速度更快,安装语法也更简洁。 命令对比如下:npm install <==> yarn npm install taco --save <==> yarn add taconpm uninsta原创 2020-09-26 10:30:33 · 16080 阅读 · 2 评论