以太坊学习笔记

一、SyntaxError: Functions are not allowed to have the same name as the contract. If you intend this to be a constructor, use “constructor(…) { … }” to define it.
0.4.22版本后将function name(此name与合约名相同)改为constructor
例如:contract hello{
function hello(){}
}
改为contract hello{
constructor(){}
}
构造函数constructor功能:初始化,用于定义初值,在部署合约时定义

二、assert and require
两个都是条件限制函数,assert表示里面的条件一定为真,为假就表示是我们内部的一个逻辑错误,就是说我们程序出错了,不允许为假。
require里面可以为假,假的也就是输入非法而已

三、bool类型
参考百度百科
布尔类型对象可以被赋予文字值true或者false,所对应的关系就是真与假的概念

布尔类型只有两个值,false 和 true。
通常用来判断条件是否成立。
如果变量值为 0 就是 false,否则为 true,布尔变量只有这两个值。
如:
  例1:bool pb= -1.5; // pb=true;
  例2:bool pt=0; // pt=false;

四、授权映射
mapping(address=>mapping(address=>uint)) public allowance;
调用allowance,第一个参数表示最内层地址给出的额度,他的余额;第二个参数???
allowance[address][address]

五、solidity中"^“与”>"的区别
“^” 表示高于设定版本,但不超过大版本
“>” 表示高于设定版本,可以超过大版本

pragma solidity >0.5.0; //表示大于0.5.0的所有版本,包括0.6.0及其以上的
pragma solidity ^0.5.0; //表示大于0.5.0小于0.6.0的版本

六、arr.push()的用法
将()内的东西加入到数组的末尾,得到新的数组。
测试链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/push

链接可在线测试push的用法,帮助理解其用法。

七、Expected a state variable declaration. If you intended this as a fallback function or a function to handle plain ether transactions, use the “fallback” keyword or the “receive” keyword instead. function () payable public {}

Warning: This contract has a payable fallback function, but no receive ether function. Consider adding a receive ether function.

当一个合约需要进行以太交易时,需要加两个函数
fallback () payable external {}
receive () payable external {}
显然,第一个是版本更新导致的错误,用fallback代替function。第二个警告是有fallback,就要加一个receive。

八、payable
constructor 上加payable ,表示想在合约部署的时候就要给合约转币。就是部署合约的同时给合约账户一些以太。
如果我们发起交易要给合约转币,这时候要加回退函数:
fallback () payable external {}
receive () payable external {}
函数中加payable表示是我们可以给他转币
进行纯转账时,会触发回退函数。当合约收到以太但没有数据,回退函数就会执行,这是回退函数需要加上payable。

九、remix中橘色表示是修改状态的,蓝色表示是不修改状态的
一个function我们加view那他就是蓝色不修改状态的,不加view或pure都认为他是修改状态的。
以remix中的ballot.sol为例:

对应函数与左边的颜色可以看出。

十、modifier的使用
和function有些类似。看例子:
adress public me
constructor() public {
me=msg.sender;
}
modifier aaa(){
require(msg.sender==me,“only me!”);
_;
}
函数调用时:
function bbb() public view aaa return(uint){
return 200;
}
例子只写了一部分,仅用于描述modifier的使用。
**modifier什么情况下使用:**在一个限制条件被多个地方引用时,即多个function中都需要同一个require限制时。

aaa为函数修改器的名字,{}内定义了我们的限制条件,require后面加了一个 _;,这个表示了调用这个的函数在这个位置执行,就是我们require语句后面执行。当然这个”_“除了放在require后面,也可以放前面,放前面我们就先执行函数体,然后再执行require。
require中,我们除了判断语句,还在后面加了一个类似于注释的语句only me!这是我们设置的报错语句。就是当不满足require时,返回这个语句。

十一、event
日志基础设施,用来记录,存为日志。可实现print的功能
事件是能方便地调用以太坊虚拟机日志功能的接口。
event调用必须用emit
官方例子:

pragma solidity ^0.4.21;
contract SimpleAuction {event HighestBidIncreased(address bidder, uint amount); // 事件function bid() public payable {// ...emit HighestBidIncreased(msg.sender, msg.value); // 触发事件}
}

十二、控制台常用命令
Javascript Console中常用命令:

personal.newAccount():创建账户;
personal.listAccounts:查看账户,同eth.accounts
personal.unlockAccount():解锁账户;
eth.accounts:枚举系统中的账户;
eth.getBalance():查看账户余额,返回值的单位是 Wei(Wei 是以太坊中最小货币面额单位,类似比特币中的聪,1 ether = 10^18 Wei);
eth.blockNumber:列出区块总数;
eth.getTransaction():获取交易;
eth.getBlock():获取区块;
miner.start():开始挖矿;
miner.stop():停止挖矿;
eth.coinbase:挖矿奖励的账户
web3.fromWei():Wei 换算成以太币;
web3.toWei():以太币换算成 Wei;
txpool.status:交易池中的状态;
admin.addPeer():连接到其他节点;
admin.nodeInfo:查看节点摘要信息

参考学习链接:http://sai628.com/2018-06-07-geth-console.html

十三、退出vi/vim模式
命令输入:Esc+:+wq/q/wq!/q!
!表示强制执行
wq保存并退出
q不保存退出编辑
!!!别忘了输入冒号

十四、solidity中view和pure的差别
版本更新时将constant分为view和pure,view表示可读不可写,pure更加严格,表示不可读不可写。

十五、以太坊私链搭建
预先装好需要的软件
首先,创建json文件,初始化创世区块
genesis.json:

{
"config": {
"chainId": 123                                                                                                    },
"gasLimit": "0x8000000",
"difficulty": "0x2000",
"alloc": {
"0x640CcA3baDE7c789306166cb47d1049740e99C28":{"balance":"10000000000000000000"}                                   }
}

然后输入初始化命令

geth --dirdata . init genesis.json

最后输入启动命令

geth --dirdata . --networkid 123

networkid与json文件中的chainid保持一致

十六、在node控制台中,使用solc.compile()命令编译智能合约时报错的问题
报错信息:{“errors”:[{“component”:“general”,“formattedMessage”:"* Line 1, Column 1\n Syntax error: value, object or array expected.\n* Line 1, Column 2\n Extra non-whitespace after JSON value.\n",“message”:"* Line 1, Column 1\n Syntax error: value, object or array expected.\n* Line 1, Column 2\n Extra non-whitespace after JSON value.\n",“severity”:“error”,“type”:“JSONError”}]}
报错原因:由于安装的solc版本与.sol文件中的选择的编译器版本不匹配的问题

*迷惑点:我是使用的时web3@0.20.1和solc@0.6.12,.sol文件中为pragma solidity ^0.6.8;按理来说solc版本应该是匹配没问题的,但是依旧报同样的错误

最后解决方案: 最后没找到原因,我将安装的solc卸载,装了0.4.22版本的solc,编译通过。
感觉好像web3的版本和solc的版本之间也存在兼容问题,可能web3@0.20.1和solc@0.6.8不能同时使用。
感谢https://blog.csdn.net/Ye_zen/article/details/106588850

十七、solidity–enum

https://blog.csdn.net/tsyx/article/details/79500036
https://www.tryblockchain.org/Solidity-Type-Enum-%E6%9E%9A%E4%B8%BE.html

枚举类型是在Solidity中的一种用户自定义类型

enum是枚举,就是某个变量的值是能够列举的,比如,星期的话就每周1到7,月的话就1到12、而struct的话是对于某个变量是有很多数据类型构成一个总体的,比如学生这个变量,他需要学号,姓名,年龄,性别等等,这个时候就需要定义结构体了。

十八、view和pure
只要有了pure与view修饰符的函数,那么调用函数就不会消耗gas。而没有pure与view修饰的函数,如下面的change就会消耗gas。
view只可以修饰函数,不可以修饰变量。 pure只可以修饰函数。

十九、solidity mapping

例子:

contract MappingExample{mapping(address => uint) public balances;function update(uint amount) returns (address addr){balances[msg.sender] = amount;return msg.sender;}
}

mapping定义的变量balances,msg.sender视为balances的参数,得到余额

二十、storage和memory
状态变量(在函数之外声明的变量)默认为“storage”形式,并永久写入区块链;而在函数内部声明的变量默认是“memory”型的,它们函数调用结束后消失。

二十一、solidity中内置函数


以第一个图为准,第二个图参考。block.blockhash以弃用,改为blockhash

二十二、基本类型转换–显式转换

链接:https://learnblockchain.cn/docs/solidity/types/conversion.html

类型名后面直接加小括号就是强制转换了

二十三、assert() 、 require() 和 revert()
分析下例逻辑,就很明显了

二十四、solidity中indexed 参数

indexed参数只在events中使用,indexed使我们可以通过参数索引直接搜索到events。

二十五、web3.eth.sign 与 web3.personal.ecRecover

在geth客户端执行

二十六、

以太坊学习笔记(持续更新,欢迎指正)相关推荐

  1. 重拾CCNA,学习笔记持续更新ing......(4)

    重拾CCNA,学习笔记持续更新ing......(4) 路由器作用功能的经典解说(笑)(非原创) 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大 ...

  2. Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新

    我的学习笔记 - 9iAdmin.NET 欢迎学习交流 (一)前端笔记 1.1 关于.env的设置 1.2 关于路由模式问题 1.3 关于 vue.config.ts 1.4 关于 打包(pnpm r ...

  3. 【区块链2.0 以太坊学习笔记1】第一个solidity程序与整型/bool型基本运算

    Hint:此系列学习笔记为准备毕设期间学习记录所书,有任何疑问,欢迎一起讨论 学习资料及工具推荐 Solidity IDE Remix(在线浏览器编辑器) 关于此在线ide的使用介绍,可以参考这里 B ...

  4. JS逆向学习笔记 - 持续更新中

    JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...

  5. 以太坊学习笔记(一)——免费获得测试ETH

    以太坊除了主网之外,还有:Ropsten,Kovan,Rinkeby等测试环境可供学习,在浏览器钱包插件MetaMask里有以下几个测试环境可以供我们使用 目前以太坊开发最常用的测试网络是Rinkeb ...

  6. 区块链以太坊学习笔记

    以太坊物联网区块链(一) Web3js 与 java 连接区块链可以参考我github上的两个小demo Ethereum-java Ethereum-javascript 搭建私有链, 利用以太坊平 ...

  7. 专升本 计算机 公共课学习笔记(持续更新中...)

    计算机公共课学习笔记 第一章 计算机基础知识(30分) 1.计算机概述 计算机(Computer)的起源与发展 计算机(Computer)也称"电脑",是一种具有计算功能.记忆功能 ...

  8. 以太坊学习笔记(一):基于POA的私有链搭建

    简介 这里以太坊的一些特性就不赘述,可以在官网进行查阅:https://www.ethereum.org/. 下面主要介绍基于POA机制的环境的搭建来窥探以太坊的运行机制. 源码下载及编译 1.git ...

  9. CSS(3)学习笔记——持续更新

    本篇皆是本人长期记录并整理出来的笔记,如有记录得不对的地方,欢迎探讨.记录的很少,将不断学习不断补充. 1 选择器 CSS(3)中提供的选择器手册(w3school):http://www.w3sch ...

最新文章

  1. python json有什么用_为什么要学习用Python解析JSON数据?
  2. [转帖]Ubuntu 对应内核版本
  3. ubuntu18.04搭建 kubernetes(k8s)集群
  4. Oracle数据库的命令工具sql*plus/sqlplus介绍
  5. react jest测试_如何设置Jest和Enzyme来测试React Native应用
  6. 只想在老家找份工作很难吗_当您只想完成工作时,为什么公开工作会很困难
  7. FF:纳斯达克要求退市系误读 警示函仅与推迟提交Q3财报相关
  8. 文件,多级目录的拷贝 笔记学习
  9. 在 Mac OS X 安装gcc编辑环境,make不能用时参考
  10. 阶段3 2.Spring_09.JdbcTemplate的基本使用_2 JdbcTemplate的概述和入门
  11. Android Tv wifi网络登录认证
  12. 全网史上最全的AR学习开发资源汇总(转载他人整理作品,供参考)
  13. Python 简单编写一个注册邮箱
  14. 【证明】矩阵特征值之和等于主对角线元素之和
  15. 中触媒科创板上市:市值74亿 为李进与刘颐静夫妻店
  16. java jxl 写 excel文件_Java使用jxl包写Excel文件适合列宽实现
  17. mysql 介绍 怎么下载 驱动jar包 各种细节问题大详解
  18. [行路难]——开始漫漫编程路
  19. Android开发之Zip下载解压
  20. 重复读取输入流InputStream

热门文章

  1. 支付户+存管户基本解释
  2. Qt图形视图框架图片图元QGraphicsPixmapItem
  3. “海底捞”的管理智慧
  4. B站怎么就成为了教育类的视频网站了
  5. VoLTE、VoWiFi和VoIP有什么不同?
  6. matlab-colormap-contourf函数
  7. Android鬼点子-自定义View就像PS
  8. lol无限乱斗服务器,LOL2019新模式无限乱斗怎么玩 LOL无限乱斗玩法攻略
  9. C语言删除字符串的所有尾部空格
  10. 抖音怎么测试新号|成都集光共创