
智能合约
文章平均质量分 75
瘦身小蚂蚁
这个作者很懒,什么都没留下…
展开
-
Ethersjs生成指令集,为Solidity合约中call参数使用
在Remix中进行测试,通过测试函数 getCallBytes 生成payload,此函数中参数值是固定的。测试结果如下,打印出payload, 与合约函数getCallBytes生成的payload是一致的。原创 2023-04-05 23:43:10 · 659 阅读 · 0 评论 -
Solidity 使用staticcall 或 call调用方法中包含结构体的参数
使用call函数调用,可以修改合约中的状态变量。但是,如果您只是想查询外部合约的状态而不修改它,则应使用staticcall函数调用,不能修改合约中的状态变量,所以如果想查询而不修改外部合约的状态变量则使用staticcall。原创 2023-04-05 02:52:46 · 814 阅读 · 0 评论 -
Remix 中 struct 参数传递
在Remix中,struct作为一个参数传入时是一个tuple,需要使用中括号[]引起所有参数。部署上面合约时需要传递struct参数,正确传递参数值为。原创 2023-03-29 21:02:10 · 834 阅读 · 0 评论 -
Solidity 状态变量、局部变量、struct产生的Gas费
动态长度的字节数组(bytes):动态长度的字节数组存储时包含两部分:一部分是指向实际数据的指针,另一部分是存储实际数据的空间。动态长度的字节数组(bytes):动态长度的字节数组存储时包含两部分:一部分是指向实际数据的指针,另一部分是存储实际数据的空间。动态长度的数组(array):动态长度的数组存储时包含两部分:一部分是存储数组长度的空间,另一部分是存储数组元素的空间。动态长度的数组(array):动态长度的数组存储时包含两部分:一部分是存储数组长度的空间,另一部分是存储数组元素的空间。原创 2023-03-15 10:18:00 · 588 阅读 · 0 评论 -
Hardhat 调用合约方法中参数为结构体struct类型的传参方式
【代码】Hardhat 调用合约方法中参数为结构体struct类型的传参方式。原创 2023-03-14 21:58:26 · 633 阅读 · 0 评论 -
安装Aptos CLI 并 部署move智能合约
在使用git下载aptos-core里有官网提供测试合约,路径 /home/aptos/aptos-core/aptos-move/move-examples/hello_blockchain/编辑完后,按Esc退出编辑状态,输入:wq 保存文件。进入aptos-core目录。原创 2022-11-26 08:14:49 · 2431 阅读 · 0 评论 -
Move 学习记录
c3 = @0x1;}}地址可以使用名称或地址值表示,如下图所示:}结构体名称首字母大写字段数量在0~65535结构体不可递归id: u64,age: u8,}id: _id,}}}}}}}script {}}输出结果:debug: 20。原创 2022-11-21 10:18:05 · 416 阅读 · 0 评论 -
Solidity - receive 接收以太函数 - 1种触发方式
一个合约中最多有一个receive函数,与fallback带payable形式一样,用来接收以太,函数声明:receive() external payable { ......}不需要function关键字,无参无返回值,且必须是external 与 payable 修饰。receive函数可以是virtual的,可以被重载也可以有修改器modifier。...原创 2022-07-11 06:00:00 · 731 阅读 · 0 评论 -
Solidity - 安全 - tx.origin
在官网中对tx.origin有一段描述:Never use tx.origin for authorization.(永远不要使用tx.origin 做身份认证),即类似验证语句如 require(tx.origin == owner); 举2个例子说明一下,同时也提出了一个问题。原创 2022-07-08 07:15:00 · 633 阅读 · 0 评论 -
Solidity - 使用Remix 插件 SOLIDITY 2 UML 生成UML类图 及 在以太坊浏览器中查看UML类图
今天想把已经写好的合约使用UML梳理一下,因为使用到了接囗、库、抽象合约及合约,所以想使用UML梳理一下更清晰。本来想用Viso,但是在其它语言里没有库(library)的概念,所以查了一下如何表示,结果意外发现了一个好功能,Sol2UML,原来Remix插件也支持这个功能,非常简单易用,这真是大大节约了手写生成类图的时间。下面来演示一下:对应右侧会显示Solidity 2 UML标签,生成合约对应的UML类图,此图是一个.svg文件,可以将其下载保存。在插件中搜索sol时,可以看到SOLHINT LINT原创 2022-07-04 08:00:00 · 1755 阅读 · 0 评论 -
Solidity - 算术运算的截断模式(unchecked)与检查模式(checked)- 0.8.0新特性
0.8.0版本开始,算术运算有两个计算模式,一个是“wrapping”(截断)模式或为“unchecked”(不检查)模式,即在发生溢出的情况下会进行“截断”,不会触发失败异常,从而得靠引入额外的检查库来解决这个问题(如OpenZeppelin中的SafeMath库);另一个是"checked"(检查)模式。默认情况下,算术运算使用的是“checked”模式,会进行溢出检查,如果结果溢出,会出现失败异常回退。............原创 2022-06-30 23:54:56 · 2611 阅读 · 0 评论 -
Solidity - 合约结构 - 错误(error)- ^0.8.4版本新增
我们知道,合约结构包含 状态变量、函数、函数修改器(modifier)、事件(event)、结构体(struct)和枚举类型(enum)。在^0.8.4版本,合约结构增加了错误(error),为应对失败时,错误可以在revert 中使用。与错误字符串相比,error花费更少的gas(即更便宜),并且允许编码额外的数据,还可以使用natspec注释形式。......原创 2022-06-30 21:48:08 · 2210 阅读 · 0 评论 -
Solidity - 安全 - 重入攻击(Reentrancy)
首先简要说明下一个很有名的重入攻击事件,再模拟重入攻击。The DAO是分布式自治组织,2016年5月正式发布,该项目使用了由德国以太坊创业公司Slock.it编写的开源代码。2016年6月17上午,被攻击的消息开始在社交网站上出现,到6月18日黑客将超过360万个以太币转移到一个child DAO项目中,child DAO项目和The DAO有着一样的结构,当时以太币的价格从20美元降到了13美元。当时,一个所谓的”递归调用“攻击(现在称为重入攻击)名词随之出现,这种攻击可以被用来消耗一些智能合约账户。这原创 2022-06-28 09:30:25 · 2558 阅读 · 2 评论 -
Solitidy - fallback 回退函数 - 2种触发执行方式
fallback 函数是合约中的一个未命名函数,没有参数且没有返回值,可见性必须是 external,且可以是 virtual的(即可以被重载),也可以有修改器 modifier。fallback执行条件:如果在一个合约的调用中,没有其他函数与给定的函数标识符匹配时(或没有提供调用数据),fallback函数会被执行;当合约收到以太时,fallback函数会被执行。......原创 2022-06-28 07:00:00 · 2147 阅读 · 4 评论 -
Solidity - 合约继承子合约包含构造函数时报错 及 一个合约调用另一合约view函数收取gas费用
在写了一个业务合约时,发现被继承合约含有构造函数时报错,去掉被继承合约中构造函数正常,有些奇怪,于是写一个简单例子进行复现。合约代码如下:错误信息Remix浏览器执行结果:当继承合约时,派生合约(子合约)需要提供基类构造函数需要的所有参数,参见 合约 — Solidity develop 文档在派生合约构造函数中添加基合约所需要的参数修正后合约代码如下:如果基合约构造函数无参数,在派生合约中也需要提供基合约构造函数,只是无参而已,微调上面代码,基合约构造函数设置无参...原创 2022-06-26 06:30:00 · 1337 阅读 · 0 评论 -
MetaMask 添加BSC、Polygon网络配置
打开浏览器,点击MetaMask插件,选择网络,点击弹窗中的“Add Network”按钮添加各网络配置,添加BSC主网、BSC测试网、Polygon网络配置原创 2022-06-13 17:50:43 · 7210 阅读 · 3 评论 -
Hardhat - 警告合约代码超长解决方案
编译合约时警告 合约代码超长,编译命令:警告信息如下:由于合约内容较多,在Remix中编译时也出现 以上警告信息,若不解决,部署时会报错,在Remix中编译时选中“Enable optimization”,在Hardhat中编译需要配置文件添加如下内容:设置完成后再次编译正常,部署也正常了。...原创 2022-06-07 09:12:35 · 1788 阅读 · 0 评论 -
Remix-IDE安装开发环境与使用文档(Windows环境)
最近一直使用Remix浏览器写合约,但是Remix不知哪一时刻就会崩,遇到很多次了,怕代码丢失,因此下载安装本地Remix-IDE。1、安装Remix-IDE下载安装文件, 下载地址:https://github.com/ethereum/remix-desktop/releases选择exe文件下载,然后正常安装即可。打开Remix IDE,一直在空白页面不变,选择File -> Open Folder,一直没反应,关闭重新打开还是这个空白页面于是一直此状态不动,过了几.原创 2022-05-24 12:28:43 · 11430 阅读 · 1 评论 -
Web3js 简单示例展示 - 合约调用,并通过github服务访问
1、源码文件源码文件已上传至github,可参见:GitHub - tracyzhang1998/tracyzhang1998.github.io: web3js简单示例(包含账户信息、转账、合约调用)2、github配置服务(1)创建仓库登录github,点击右上角加号“+”,选择New Repository(2)填写仓库相关信息注:要想成为服务,仓库名称必须遵守规则,规则为:自己的用户名.gitbut.io点击“Create repository”按钮创.原创 2022-05-23 08:09:42 · 972 阅读 · 0 评论 -
Solidity - 使用hash值和使用字节长度判断字符串哪个方法比较省Gas
合约代码// SPDX-License-Identifier: MITpragma solidity ^0.8.7;/** * @dev String operations. */library Strings { /// @dev 比较2个字符类型是否相等 function isEqual(string memory strLeft, string memory strRight) internal pure returns(bool) { bytes原创 2022-05-23 00:07:49 · 778 阅读 · 0 评论 -
Go 通过etherscan api访问接囗报错
0、前提条件(1)操作系统 操作系统Windows10中进行开发测试(2)参考代码GitHub - nanmu42/etherscan-api: Golang client for Ethereum Etherscan API (and its families like BscScan) / Golang 以太坊 Etherscan API库(也支持同一家族的BscScan)注:已使用科学上网1、测试代码import ( "github.com/nanmu...原创 2022-05-20 15:38:33 · 1123 阅读 · 0 评论 -
Solidity 工厂模式
最近在看智能合约的工厂模式,工厂模式明白,但部署后的合约总是工厂中的方法,久久不明白是怎么回事,今天在学习课程时终于解决了这个问题。首先来看一个工厂模式的例子,最近总是去做核酸,因此写一个防疫站点工厂吧。1、一个防疫站点合约,里面记录站点信息与方法2、一个防疫站点工厂合约,用于创建防疫站点或注销防疫站点方法(例子中暂时只有创建没有注销)以下只是简单示例,没有过多校验与逻辑:备注:编写、编译、部署合约都是在Remix中完成。// SPDX-License-Identifie.原创 2022-05-05 15:02:44 · 485 阅读 · 0 评论 -
Solidity 使用及注意事项
1、规范(1)习惯上函数中的参数变量是以_(下划线)开头,以区别全局变量;私有函数名字也用_(下划线)开头。pragma solidity ^0.6.0;contract Student { string name; //私有函数名_create 与参数变量_name,都以_开头 function _create(string _name) private { name = _name; }}2、变量、变量类型、变量修饰符(1)状态变量原创 2022-05-04 02:36:37 · 3494 阅读 · 0 评论 -
Solidity - 智能合约标准ERC-721
详情参见:EIP-721: Non-Fungible Token StandardERC721 定义了一种以太坊生态中不可分割的、具有唯一性的Token交互、流通的接囗规范。官网简要称为 Non-Fungible Token Standard(简称NFT标准规范),即非同质化Token(或不可替代的Token)。ERC721合约标准提供了在实现ERC721 Token 时必须要遵守的协议,要求每个ERC721标准合约需要实现ERC721接囗及ERC165接囗,ERC165可参见:Solidity -原创 2022-05-03 07:00:00 · 2707 阅读 · 2 评论 -
Hardhat创建、编译、测试智能合约
部署环境操作系统:Win10前提条件安装Nodejs(版本在v14+),可参考:安装 Nodejs (CentOS7 与 Windows)_ling1998的博客-优快云博客安装hardhat并展示样例(1)创建并进入目录F:\>mkdir hardhatdemoF:\>cd hardhatdemo(2)初始化项目F:\hardhatdemo>npm init --yes #初始化项目,--yes跳过提示信息Wrote to F:\Golang\原创 2022-04-26 17:33:43 · 5961 阅读 · 0 评论 -
Hardhat安装与相关插件报错记录
1、安装hardhat报错操作系统:Windows10与linux安装harhat时报错,查看相应解决方案,但当时未成功(持续3小时,当时太晚了就放弃了),试过上安装,都报错,不能正常执行安装命令;科学上网也试了,未成功。但是第二天再试,突然就好了,没有出现任何错误,不知道是否与使用时间有关。当晚安装hardhat报错如下:F:\hardhatdemo>npm install --save-dev hardhatnpm ERR! code 1npm ERR! path F:\Go原创 2022-04-26 10:25:47 · 2263 阅读 · 0 评论 -
Solidity 问题汇总
1、在自己的Geth私链上执行获取合约余额函数报错,但是使用Remix的 Javascript VM 执行时正常。(1)函数 //查询合约账户余额,使用view修饰符 function getContractAccountBalance() public view returns (uint256){ return address(this).balance; //this为本合约对象 }(2)错误信息call to functionModifi原创 2022-04-22 21:37:53 · 3549 阅读 · 0 评论 -
Geth 常用操作
创建账户> personal.newAccount("abc") # abc为账户密码"0x079ffc39b9e5bcaa23134659f5d25320b9c32f15"赋值> acc1=eth.accounts[1]"0x079ffc39b9e5bcaa23134659f5d25320b9c32f15"转账> eth.sendTransaction({from:acc0,to:acc1,value:web3.toWei(1,'ether')})"..原创 2022-04-22 07:00:00 · 788 阅读 · 0 评论 -
CentOS7 - Truffle 创建、编译、部署、测试智能合约
注:在配置环境及部署合约时遇到诸多问题,这些问题及解决方案也做了记录,一些未成功的方法可略过,直接使用成功的方法。0、前提条件(1)安装Nodejs参考安装 Nodejs (CentOS7 与 Windows)_ling1998的博客-优快云博客(2)安装truffle参考安装 truffle (CentOS7 与 Windows)_ling1998的博客-优快云博客(3)安装与启动ganache-cli[root@localhost truffle]# npm ins..原创 2022-04-14 07:00:00 · 2154 阅读 · 0 评论 -
安装 truffle (CentOS7 与 Windows)
提前条件安装Nodejs 可参考:Centos7 安装 Nodejs_ling1998的博客-优快云博客CentOS7安装1、设置镜像npm config set registry https://registry.npm.taobao.org2、安装注:加上版本号,否则一直报错npm install -g truffle@5.1.13不带版本号,一直卡在下面的位置不动[root@localhost truffle]# npm install -g truff..原创 2022-04-13 13:08:59 · 1956 阅读 · 4 评论 -
FISCO BCOS Go-sdk 配置文件
0、参考文档GitHub - FISCO-BCOS/go-sdk: golang SDK of FISCO BCOS1、环境配置操作系统:CentOS7Golang版本:1.17.2WeBASE版本:1.5.2(已开启)Git版本:1.8.3.12、下载go-sdk(1)进入工程目录[root@localhost ~]# cd /home/tracy/GoContract/(2)下载Go-sdk[root@localhost GoContract]# git原创 2022-04-11 07:00:00 · 2307 阅读 · 1 评论 -
WeBASE部署 - 搭建FISCO节点
参考文档WeBASE官网:一键部署 — WeBASE v1.5.4 文档部署环境虚拟机:VMWare Workstation 15 Pro虚拟机安装的操作系统:CentOS7.9(带可视化界面),官网推荐使用CentOS7.2+前置条件1、Java (Oracle JDK 8 至 14)安装JDK8,参见:CentOS7 安装 Java JDK_ling1998的博客-优快云博客2、MySQL(MySQL5.6+)注:之前没有安装过MySQL,若安装了MySQL5.5及原创 2022-04-10 08:00:00 · 4356 阅读 · 0 评论 -
Geth 使用DEV模式开启,MetaMask需要1337连接
1、开启Get使用dev模式开启的networkid为1008geth --datadir ./data --networkid 1008 --port 30303 --http --http.addr 0.0.0.0 --http.vhosts "*" --http.port 8547 --http.api 'db,net,eth,web3,personal' --http.corsdomain "*" --dev --dev.period 1 console 2> 1.log..原创 2022-04-05 19:18:33 · 1650 阅读 · 0 评论 -
Geth 使用dev模式启动报错:Fatal: Failed to unlock developer account: could not decrypt key with given pass
前提条件:Geth配置时,创建了一个账户,使用非开发者模式开启,开启命令如下:geth --datadir ./data --networkid 108 --port 30303 --http --http.addr 0.0.0.0 --http.vhosts "*" --http.api "db,net.eth.web3,personal" --http.corsdomain "*" --snapshot=false --allow-insecure-unlockconsole 2>1.lo.原创 2022-04-04 19:07:23 · 2877 阅读 · 2 评论 -
Solidity - 合约升级
目录合约调用智能合约升级1、主-从模式2、代理模式合约调用以下是一个合约调用另一个合约示例:pragma solidity^0.6.0;contract C1{ string private name; function getName() external view returns (string memory) { return name; } function setName(string calldata _.原创 2022-03-31 07:00:00 · 983 阅读 · 0 评论 -
Solidity - 智能合约标准ERC-165
目录1、如何获取接囗标识符2、合约如何实现接囗3、如何检测合约实现了ERC-165接囗4、如何检测合约实现了指定的接囗测试ERC-165 Standard Interface Detection ,即检测合约是否实现接囗规范,使用函数标识(.selecor)进行检测。参考:EIP-165: Standard Interface Detection1、如何获取接囗标识符pragma solidity ^0.4.20;interface Solidity101 {...原创 2022-03-29 22:34:30 · 2332 阅读 · 0 评论 -
Solidity - 基本类型、函数等内容
基本类型基本类型 说明 示例 string 字符串,UTF8编码 "Hello World","世界" bool 布尔类型 true,false int ( int8,int16,int24... int256 ) 有符号整数(负数,0,正数) 从8位开始到256位,每次步长8位 -100,0,2980 uint (uint8,uint16,uint24... uint256原创 2022-03-27 00:18:13 · 1009 阅读 · 0 评论 -
Remix 使用Web3 Provider连接不上 Geth
环境Remix :Win10中 Chrome浏览器打开Remixhttps://remix.ethereum.org/Geth(版本1.10.16):运行在VMware中Centos虚拟机中操作时间:2022-03-24问题在使用Remix中Web3 Provider连接Geth私链时,一直连接不成功。虚拟机中Geth启动命令:geth --datadir data --networkid 18 --http --http.corsdomain "*" --http.addr.原创 2022-03-25 15:36:43 · 3143 阅读 · 0 评论 -
Geth-1.10.16 私链搭建
目录1、创建账户(1)创建目录rungeth并进入(2)创建账户(3)查看生成目录及文件(4)查看账户信息2、初始化创世块(1)生成创世块(2)初始化创世块3、启动Geth(2)启动Geth(3)查看账户操作系统:Centos7参考官网文档:Private Networks | Go Ethereum1、创建账户(1)创建目录rungeth并进入[root@localhost local]# cd geth-alltools-1.10..原创 2022-03-25 07:00:00 · 6502 阅读 · 2 评论 -
Geth-1.9.10私链搭建
目录创世块文件Geth常用参数说明Geth启动步骤1、生成创世块文件2、初始化3、启动Geth(1)最简模式开启(2)连接节点(3)使用脚本启动Geth操作1、查看所有账户2、创建账户3、挖矿4、查询余额、设置变量5、转账、解锁创世块文件{ "config": { "chainId": 18, "homesteadBlock": 0, "eip150Block": 0, ...原创 2022-03-24 01:41:07 · 3623 阅读 · 2 评论