28.哈希函数:Keccak256哈希函数(hashfunction)是一个密码学概念,它可以将任意长度的消息转换为一个固定长度的值,这个值也称作哈希(hash)。solidity最常用的哈希函数keccak256。Hash的性质一个好的哈希函数应该具有以下几个特性:单向性:从输入的消息到它的哈希的正向运算简单且唯一确定,而反过来非常难,只能靠暴力枚举。灵敏性:输入的消息改变一点对它的哈希改变很大。高效性:从输入的消息到哈希的运算高效。均一性:每个哈希值被取到的概率应该基本相等。抗碰撞性:弱抗碰撞性:给定一个消息x,找到另一个消息x'使得hash(x)=hash(x')是困难的。强抗碰撞性:找
别慌,月亮也在大海某处迷茫 目录一、Solidity编程风格1.代码布局 2.代码中各部分的顺序3.命名约定二、Solidity智能合约编写过程1.solidityHelloWorld2.版本声明3.导入声明4.合约声明三、Solidity合约结构智能合约Test四、Solidity常见编译错误五、Solidity调用合约1.调用内部合约2.调用外部合约通过接口方式调用通过签名方式调用签名方式调用,发送Eth六、Solidity自毁合约selfdestruct1.销毁合约示例2.强制发送资金示例七、Solidity哈希算法keccak256 八、Solidity权限控制合约十、Solidity
Solidity是一门面向合约的、为实现智能合约而创建的高级编程语言,设计的目的是能在以太坊虚拟机上运行。本章大概介绍合约的基本信息,合约的组成,语法方面不做过多的介绍,个人建议多阅读官方文档效果更佳,后续的章节会开发ERC20代币合约案例以便于更好的学习智能合约的开发官网文档:https://docs.soliditylang.org/en/v0.8.12/中文文档:https://learnblockchain.cn/docs/solidity1、第一个合约介绍我们来看一个最简单的存取整形数据的合约代码//SPDX-License-Identifier:GPL-3.0pragmasolid
数组类型Solidity支持两种数组:静态数组和动态数组。又分storage与memory型数组uint[]memorylist;//变长memory数组,使用前必须确定长度list=newuint[](a);//然后再使用,一般用在函数内memory型数组不能使用pop,push也不能修改length静态数组//固定长度为2的静态数组定义uint[2]fixedArray;//定长数组实例化fixedArray=[4,6];静态数组不可新增元素,但可修改现有元素的值。动态数组动态数组,长度不固定,可以动态添加元素。//声明uint[]dynamicArray;//初始化,这里实例化一个长度为
数组类型Solidity支持两种数组:静态数组和动态数组。又分storage与memory型数组uint[]memorylist;//变长memory数组,使用前必须确定长度list=newuint[](a);//然后再使用,一般用在函数内memory型数组不能使用pop,push也不能修改length静态数组//固定长度为2的静态数组定义uint[2]fixedArray;//定长数组实例化fixedArray=[4,6];静态数组不可新增元素,但可修改现有元素的值。动态数组动态数组,长度不固定,可以动态添加元素。//声明uint[]dynamicArray;//初始化,这里实例化一个长度为
备注本文绝大部分是直接从搭建僵尸工厂的一个以闯关学习Solidity相关知识的(国外?)网站抄写下来的,该网站自带sodility编辑器,而且每章节都必须按照实战演习的内容完成测试才能进入到下一章节,非常适合用一定编程基础的小伙伴自学solidity编程我整理这篇文章,一是分享觉得好的solidity学习资源给大伙;二是重新学习下solidity;三是整理上述网站的学习内容,让我自己找起来方便;上述网站是开源的,如本篇内容有侵权,可联系本博客删除;好记性不如烂笔头,抄一遍等于过一遍脑子,比扫一遍或看一遍的效果好的多得多;最后demo的步骤序号与标题序号一致,如果哪个步骤忘了具体含义,可查看对应
熟读唐诗三百首,不会做诗也会吟,Flow合约哪里读?自然是链上了,Flow的链上合约都是开源的,只要知道合约地址,都可以直接使用API获得具体的合约代码。本节就把flow链上的主要合约下载下来,然后分析,哪些可以读,哪些可以抄@#¥@#¥数据来源本文主要分析合约账号数据,在以太坊中,可以通过地址的code类型来判断是否为合约地址,Flow中也是类似的,Flow账号的数据结构如下所示:messageAccount{ bytesaddress uint64balance bytescode repeatedAccountKeykeys mapcontracts}因此,我们也可以通过获取a
1.定义事件event2.调用事件呃,emit3.external--只能外部读取4.pure--纯函数(不能读不能写状态变量,只能有局部变量,完全不对链上有任何操作)5.returns()--返回(括号是参数返回类型)6.address地址类型7.view--只读方法(读链上)–不消耗gas8.pure--不会读链上9.constant--把状态变量变成常量(常量后变大写命名名称)有助于省gas费–不需要修改的值定为常量10.判断/require(i10”)|revert(在if里面写判断)\assert--断言进行测试,不包含错误信息11.modifier–函数修改器(可做公共功能,里面的
1.什么是智能合约?(SmartContract)历史背景:最早是尼克萨博于1995年提出,就是将法律条文写成可以执行的代码。后来V神(VitalikButerin)把它引入到以太坊中,表示以太坊程序能自动执行以及无法被干预的特点。以太坊是区块链和智能合约的完美结合,通过编写智能合约可以实现强大的功能,实现去中心化的应用开发。特点:智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约本身是一堆代码,涉及到编程语言,语言的编译、部署、执行等一系列过程。Solidity就是目前最常用的用来编写智能合约的语言,以太坊也采用Solidity。2.Solidty语言简介:So
文章目录一、验证说明二、EtherscanKey三、验证插件四、源码认证4.1Remix验证(推荐)4.1.1无构造参数合约验证4.1.2有构造参数合约验证4.2单文件验证(不推荐)4.3Hardhat部署(按照需要)五、验证结果六、文章预告前置参考文档:https://blog.csdn.net/sinat_34104446/article/details/130557703一、验证说明合约验证是上传合约源代码到etherscan过程,在智能合约项目中,通常都是提供源码验证,增加项目信任度验证合约后可以直接在etherscan上执行获取和设置方法,方便日常的管理员维护以下使用remix进行验