
区块链
文章平均质量分 68
sanqima
这个作者很懒,什么都没留下…
展开
-
解决“MAC M1 incompatible architecture“问题
今天,在proxychains-ng时,弹出如下错误:libproxychains4.dylib’ (mach-o file, but is an incompatible architecture (have ‘arm64’, need ‘arm64e’)),MAC M1芯片,报软件兼容错误, 问题原因:Mac M1芯片采用Arm架构与Intel芯片的X86、X64架构,是不相同的;如果Mac主机使用的M1芯片,则需要安装M1芯片对应的软件版本,否则软件无法运行。 ...原创 2022-02-27 01:05:36 · 10938 阅读 · 6 评论 -
解决“hardhat unresolved libraries or missing links“问题
今天在Hardhat测试合约,发现"unresolved libraries"问题,如图(1)所示: 图(1) 报"库合约没有链接" 出现这种现象的原因是:若library是自定义的库文件,在部署合约时,需要手动link到合约里。 解决方法:先部署库合约,得到库合约地址,将这个地址放到业务合约的libraries列表即可。这个库合约必须要有public函数可供外部调用,不能使用函数全为internal的库合约(因为internal的库合约无法导出)。 // 1原创 2022-02-26 16:45:58 · 1135 阅读 · 3 评论 -
Uniswap的pair合约创建事件
1、uniswapV1的合约创建事件factoryV1 = 0xc0a47dfe034b400b47bdad5fecda2621de6c4d95eventV1 = 0x9d42cb017eb05bd8944ab536a8b35bc68085931dd5f4356489801453923953f92、uniswapV2的合约创建事件factoryV2 = 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6feventV2 = 0x0d3648bd0f6ba80134原创 2022-02-09 22:35:37 · 8460 阅读 · 1 评论 -
解决“DeprecationWarning: verify_ssl is deprecated“问题
今天,在aiohttp依赖包时,报"DeprecationWarning: verify_ssl is deprecated, use ssl=False instead async with aiohttp.ClientSession(connector=TCPConnector(verify_ssl=False)) as session"警告,出现这种问题的原因是:verify_ssl已经太老了,新的版本改成了ssl。 解决方法如下: 将 connector=TCPConne原创 2022-02-08 19:12:21 · 4064 阅读 · 0 评论 -
查看ERC20的精度
Erc20的精度decimals,范围为1~18,可以在对应的区块链浏览器explorer里查看。如图(1)所示。下面,介绍查看 ETH链上的ERC20: 0xdac17f958d2ee523a2206206994597c13d831ec7的decimals。1 直接查看 输入地址 --> 点击[Read] --> 即可查看deciamls。如图(1)所示,此ERC20的dicimals为6。https://cn.etherscan.com/address/0xdac17f9原创 2022-02-08 16:06:23 · 8219 阅读 · 0 评论 -
区块链的分类与地址长度
区块链有很多类型,比如,BTC、ETH、Solana等,每种类型的区块链其地址长度是不同的。BTC的地址长度为34, ETH的地址长度为42(包含前缀0x),Solana的地址长度的44。下面是按地址长度,对区块链进行分类。1.1) 地址长度2~12 EOS的地址长度为2~12.链类型地址EOS xiaochun1114EOS uu1.2 地址长度34 BitCoin、Tron、Ontology、Liquidchain的地址长度为34.原创 2022-02-08 00:45:43 · 15678 阅读 · 0 评论 -
区块链的类型与网络ID
网络名称类型ID号RPCCurrency Symbol浏览器MainNeteth主网1https://mainnet.infura.io/v3/Infura_key (Infura节点或Alchemy)ETHhttps://cn.etherscan.com/Ropsteneth测试网3https://ropsten.infura.io/v3/Infura_key (Infura节点或Alchemy)ETHhttps://ropsten.etherscan...原创 2022-01-27 14:43:28 · 3389 阅读 · 0 评论 -
解决“stream requires click<8.0,>=7.0 but you have click 8.0.3 “
今天,在使用pip安装python的依赖包时,报"streamlit 1.2.0 requires click<8.0,>=7.0, but you have click 8.0.3 which is incompatible.",如(1)所示。图(1) streamlit报click依赖包版本不兼容 问题原因: 当前的streamlit v1.2版本太低,它使用的也是低版本的依赖包click v7.1.2 ,现在click已经变成了v8.0.3,从而出现不兼容现象。原创 2022-01-19 15:43:29 · 5362 阅读 · 2 评论 -
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 · 941 阅读 · 0 评论 -
UniswapV2工厂合约里的函数选择器和事件选择器
UniswapV2工厂合约 UniswapV2Factory,继承于IUniswapV2Factory,如图(1)所示,用于创建配对合约。 图(2) UniswapV2Factroy工厂合约的继承图表UniswapV2Factory函数选择器和事件选择器functionselectconstructor(address)0xf8a6c595allPairs(uint256)0x1e3dd18ballPairsLength()0x574f2ba3原创 2021-12-22 16:02:20 · 440 阅读 · 0 评论 -
UniswapV2配对合约里的函数选择器与事件选择器
UniswapV2的配对合约UniswapV2Pair,继承IUniswapV2ERC20、IUniswapV2Pair这2个合约,如图(1)所示。UniswapV2ERC20 是ERC20合约,用于设置配对合约的Token名称、精度、符号等。IUniswapV2Pair用于获取交易对的价格、储备量、token0、token1的地址等 配对合约的继承表IUniswapV2ERC20的函数选择器、事件选择器functionselectDOMAIN_SEPARAT原创 2021-12-22 15:33:49 · 847 阅读 · 0 评论 -
ethers计算函数选择器与事件选择器
在Solidity中,函数选择器是对函数头进行keccak256()计算取前4个字节,事件选择器是对事件头进行keccak256()计算取完整的32字节。在ethers.js里对这个keccak256进行了封装,变成了ethers.utils.id()原创 2021-12-22 10:49:19 · 1248 阅读 · 0 评论 -
解决“No Moduled named http.client“问题
http.client模块找不到的原因是:当前工程目录下有个与系统package同名的文件夹http或者http.py,即用户定义的package屏蔽了系统的package,导致报错。解决方法:将http改成其他名称即可,比如,http --> tohttp, http.py --> tohttp.py。原创 2021-12-18 15:48:01 · 5777 阅读 · 0 评论 -
解决“function call to a non-contract account“问题
出现这种情况的原因是:**函数调用的合约找不到**,可能的原因有: - 合约没有部署; - 合约地址错误; - api-key缺少访问权限; - codeHash没有配置; - 调用的合约在主网,而被调用的合约在测试网,即两合约没有在同一个网络。原创 2021-12-11 17:43:53 · 4158 阅读 · 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 · 5374 阅读 · 0 评论 -
解决“@openzeppelin/contracts/proxy/ not find“问题
今天在slither测试智能合约时,发现"@openzeppelin/contracts/proxy " File not found问题,如图(1)所示。解决方法如下:1) 安装@openzepplin/contracs、@openzeppelin/contracts-upgradge依赖包2) 将slither的加载路径设置package.json的同级目录3)修改.sol的库文件引用路径,将@openzeppelin 改成 ../node_modules/@openzeppelin原创 2021-11-26 17:45:08 · 2545 阅读 · 2 评论 -
解决“brownie控制台print打印失效‘问题
在使用brownie测试智能合约时,有时出现print函数在控制台没有输出的情况。问题原因:没有开启 -s 参数。解决方法:在brownie test命令后面添加-s参数原创 2021-11-10 18:01:11 · 343 阅读 · 0 评论 -
在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 · 3480 阅读 · 0 评论 -
brownie部署与测试智能合约
brownie是一种Python语言的开发与测试框架,它可以部署.sol、.py格式的智能合约。- 完全支持Solidity和Vyper- 通过pytest进行智能合约测试,包括基于跟踪的覆盖率评估- 通过hypothesis进行基于属性和状态的测试- 强大的调试工具,包括python风格的跟踪和自定义错误字符串- 内置控制台,用于快速项目互动- 支持ethPM软件包原创 2021-11-09 16:14:37 · 2233 阅读 · 2 评论 -
解决“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 · 688 阅读 · 0 评论 -
ethers.js读写合约里的状态变量
在ethers.js里,对合约状态变量的访问有2种方式:只读方式和读写方式。当访问合约里的状态变量时,需要知道该合约的地址、abi、provider(或signer)。只读方式,只能读取状态变量;而读写方式,既可以读取状态变量,还可以修改状态变量。原创 2021-10-31 17:30:57 · 6705 阅读 · 0 评论 -
解决”recipient.call{value : amount}(““)“问题
今天,在编译Solidity智能合约时,报"ParserError: Expected ';' but got '{'"错误,如图(1)所示。 问题原因:.call()调用在不同的Solidity版本里,是不相同的。解决方法:根据Solidity版本,来更改.call()写法。原创 2021-10-25 16:21:31 · 1147 阅读 · 0 评论 -
监听Solidity合约事件
在ethers.js里,使用contractWithSigner.on()的方式,监听合约的某个事件或者地址上的交易。合约的事件,会通过emit event的方式发出,使用contractWithSigner.on() 注册了该事件,就可以实现监听了。下面以监听EventValue.sol里的ValueChanged事件为例,进行说明。原创 2021-10-24 12:50:41 · 5108 阅读 · 0 评论 -
使用ethers.js部署Solidity智能合约
ethers.js是一个非常精简的以太坊操作库,它包含如下四个模块:Ethers.provider,Ethers.contract,Ethers.utils,Ethers.wallets其中,Ethers.provider负责与以太坊节点进行连接,查询交易、广播交易,获取账户余额等功能;Ethers.contract负责与智能合约进行交互,包括部署合约、监听合约里的事件、获取合约里的信息,调用合约里的函数等功能;Ethers.utils是一个工具库,主要用于处理输入、输出数据,数据的进度与格式转换;原创 2021-10-24 10:57:53 · 4878 阅读 · 1 评论 -
Solidity状态变量的可见性
Solidity的状态变量,有private、public这2种,其中private表示私有,在本合约里可见;public表示公有,在本合约、以及它的子合约都可见。如果一个状态变量,既没有被private修饰、也没有被public修饰,则它默认私有的。原创 2021-10-23 18:25:39 · 1090 阅读 · 0 评论 -
Sushiswap的部署方法
Sushiswap是从UniswapV2分叉而来,加了MasterChef合约、SushiToken合约。下面介绍,使用truffle将Sushiswap部署到ganache本地私有链。原创 2021-10-22 13:35:40 · 1332 阅读 · 0 评论 -
以太坊外部账户EOA与合约账户CA的区别
在以太坊中,账户拥有4个字段:{nonce,balance,codeHash,StorageRoot}。分为2种账户:外部账户、合约账户。外部账户,Externally Owned Accounts,简称EOA,它拥有私钥,其codeHash为空; 合约账户,Contact Account,简称CA,它没有私钥,其codeHash非空。原创 2021-10-20 11:49:06 · 6802 阅读 · 2 评论 -
使用Slither检查智能合约
Slither 是一个专门用来对Solidity智能合约进行Bug分析的工具,使用Slither可以方便的检测合约里的缺陷和漏洞,但是该工具有漏报现象,比如对for循环里的数据溢出检测就不是很灵敏,需要人工审计代码。原创 2021-10-18 16:02:59 · 10797 阅读 · 0 评论 -
使用web3.py发送ETH和ERC20
2021年,web3.py的版本更新到了v5.4,其库函数名称改了很多,库函数名称由之前的驼峰命名xxxYYYzzz(错落有致,用大小写区别不同的名称),改成蛇形命名法: xxx_yyy_zzz(名称全部小写,名字之间用- 下划线连接)。使用web3.eth.send_transaction()来发送ETH, 使用web3.eth.wait_for_transaction_receipt()来发送ERC20。原创 2021-10-15 20:35:42 · 5816 阅读 · 6 评论 -
解决“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 · 5109 阅读 · 9 评论 -
使用hardhat将合约部署到ganache
hardhat使用命令:npx hardhat run scripts/deploy.js --network XXXnet,既可以把合约部署到主网(mainnet)、测试网(ropsten、rinkey),还可以部署到本地网络(ganache,hardhat-test)。比如,npx hardhat run scripts/deploy.js --network ganache,就可以把合约部署到ganache,下面以onehat工程为例,将token.sol合约部署到ganache。原创 2021-10-12 00:07:50 · 3996 阅读 · 0 评论 -
创建hardhat工程, 用于Solidity测试
hardhat是一个专门用来进行智能合约开发、测试的软件工具集,它即可以在本地自动部署一个以太坊网络,类似于ganache,又可以像truffle一样,快捷的部署、测试和调试Solidity智能合约。即 hardhat = ganache + truffle。下面,介绍hardhat的工程创建流程,这里以onehat工程为例。原创 2021-10-11 22:16:31 · 2091 阅读 · 0 评论 -
openzeppelin批量测试Solidity合约
openzeppelin是用于Solidity合约进行审计、代码安全测试的库,其中test-environment、test-helpers使用起来非常方便。下面,介绍对ERC20GuDingToken.sol、ERC20XiaoHuiToken.sol这2个合约的批量测试。原创 2021-10-02 10:35:32 · 1206 阅读 · 0 评论 -
truffle部署指定的合约
truffle可以根据/migrations/ID_deploy_XXX.js里的ID号,来部署与ID绑定的合约,使用命令为 migrate -f ID --to ID,例如,部署 2_deploy_HWT.js的命令为: migrate -f 2 --to 2原创 2021-10-02 08:51:30 · 1894 阅读 · 0 评论 -
将Solidity abi.json压缩成一行
智能合约编译成功后,会得到一个.bin、.json文件,在.json文件里就含有该合约的abi。下面介绍这个abi字段压缩成一行。用vscode打开xx.json,找到abi关键字,将光标放到括号 [的左边,然后按Shift+Ctrl+→ 快捷键选中abi的[]字段 ,然后复制到json在线解析网页,点击[压缩一行],再复制到res.json里即可,如图(1)、如图(2)所示。原创 2021-09-29 08:47:48 · 1325 阅读 · 0 评论 -
获取Solidity对应的commit版本号
Solidity的编译器版本,分为nightly、commit这2种,nightly是build版,也就是测试版,而commit是正式版。这里介绍获取所有的正式版。原创 2021-09-27 16:37:54 · 993 阅读 · 0 评论 -
vscode切换Solidity的编译版本
在vscode中,先安装solidityhe、solidity Extends、solidity debugger这3个插件,然后设置Solidity的版本号。这里以设置0.7.3版本为例,进行说明。原创 2021-09-26 00:24:58 · 5189 阅读 · 1 评论 -
Solidity的上溢与下溢
Solidity是一种类似于JavaScript的语言,它面向对象,支持多继承,可以一次返回多个值。在开发智能合约的过程中,对应++、--这类的操作要考虑变量的定义域,即要考虑变量的上溢与下溢问题。原创 2021-09-25 10:55:51 · 739 阅读 · 0 评论 -
MateMask连接本地私有链节点ganache
MateMask既可以连接以太坊的主网,也可连接以太坊的测试网(ropsten网、rinkeby网),还有连接私有链,只有给出URL和端口就可以连接。这里介绍MateMask连接私有链节点ganache。原创 2021-09-21 23:35:01 · 11104 阅读 · 0 评论 -
openzeppelin与solidity版本对应关系
OpenZeppelin 是构建在 EVM 之上的开源智能合约开发工具,让开发者可以安全地开发和管理智能合约和 Dapp。OpenZeppelin 使用以太坊智能合约语言 Solidity 进行构建,并支持所有 EVM 和 eWASM 的跨平台移植。使用OpenZeppelin库,可以让智能合约更加安全、更加简洁。原创 2021-09-20 11:20:47 · 2115 阅读 · 0 评论