#如何使用solidity将数据链上存储##文章起始在看过FISCOBCOS张开翔老师的一文说清“链上”和“链下”过后,我对于数据链上存储有了非常浓厚的兴趣,因此写下了本篇文章,用于自己进行学习环境:solidity,webase-font,FISCO-BCOS节点链 ##正文首先,当我第一次看到这篇文章的时候,我就对我之前脑海中的知识体系进行了颠覆,第二次看的时候我明白了其实链上链下的区别是用于提高区块链的工作效率,当我第三次看到这篇文章的时候我已经被张老师幽默风趣的写作风格折服了,老师能在幽默中将案例讲述的非常之清楚,让每个案例为什么这样做而生动,在这之后我就将我自己的想法写到了这里 首先
constant(常量)说到常量这一概念,拥有现代编程经历的您,对这一词再熟悉不过了。常量,常量,顾名思义便是变量值始终不变,这在很多面向对象程序语言中都有。相对Solidity来说,它也是支持常量的。假若将状态变量(StateVriable)声明为constant(常量),而它的值是在编译时有确定的表达式来给它赋值。我们知道常量值是在编译时确定的,所以区块数据(例如block.timestamp,address(this).balance或者block.number)或执行数据(msg.value或gasleft())或对外部合约的调用来给它们赋值都是不允许的。允许可能对内存分配产生副作用(
constant(常量)说到常量这一概念,拥有现代编程经历的您,对这一词再熟悉不过了。常量,常量,顾名思义便是变量值始终不变,这在很多面向对象程序语言中都有。相对Solidity来说,它也是支持常量的。假若将状态变量(StateVriable)声明为constant(常量),而它的值是在编译时有确定的表达式来给它赋值。我们知道常量值是在编译时确定的,所以区块数据(例如block.timestamp,address(this).balance或者block.number)或执行数据(msg.value或gasleft())或对外部合约的调用来给它们赋值都是不允许的。允许可能对内存分配产生副作用(
关于MappingsSolidity中Mappings的概念类似于java中的hashmap或者python中的dictionnary。它们使用都起来有一点像hash表,尽管它们在以下方面略有不同:在solidity中所有可能的变量都以默认值初始化。正因为如此,mappings是没有长度的。没有设置一个key或者value的概念。关键数据不是储存在一个mapping中的,相反的它的keccak256hash值用来存储关键数据指向的value值。如何来定义一个Mapping?mapping(_KeyType=>_ValueType)mappingName;一个好建议:在mapping变量名之前使
关于MappingsSolidity中Mappings的概念类似于java中的hashmap或者python中的dictionnary。它们使用都起来有一点像hash表,尽管它们在以下方面略有不同:在solidity中所有可能的变量都以默认值初始化。正因为如此,mappings是没有长度的。没有设置一个key或者value的概念。关键数据不是储存在一个mapping中的,相反的它的keccak256hash值用来存储关键数据指向的value值。如何来定义一个Mapping?mapping(_KeyType=>_ValueType)mappingName;一个好建议:在mapping变量名之前使
基于Hardhat编写合约测试用例为智能合约编写自动化测试至关重要,毕竟写智能合约多多少少都会跟用户资金挂钩。场景这里假设自己正在开发一个NFT交易平台,这个平台可以让用户售卖自己的NFT,包括ERC721和ERC1155,并且用户可以指定购买者需要支付指定的ERC20Token购买。我们先确定自己的测试功能和目标,为了文章篇幅不要太长,我们就以卖家用户调用sell,创建售卖订单功能为目标做测试。合约代码我们需要4个合约文件:ERC20ERC721ERC1155NFTSwap(交易平台)前三种合约最简单的,我们不需要自己再去实现,直接引用Openzeppelin的合约代码即可。在contrac
基于Hardhat编写合约测试用例为智能合约编写自动化测试至关重要,毕竟写智能合约多多少少都会跟用户资金挂钩。场景这里假设自己正在开发一个NFT交易平台,这个平台可以让用户售卖自己的NFT,包括ERC721和ERC1155,并且用户可以指定购买者需要支付指定的ERC20Token购买。我们先确定自己的测试功能和目标,为了文章篇幅不要太长,我们就以卖家用户调用sell,创建售卖订单功能为目标做测试。合约代码我们需要4个合约文件:ERC20ERC721ERC1155NFTSwap(交易平台)前三种合约最简单的,我们不需要自己再去实现,直接引用Openzeppelin的合约代码即可。在contrac
YouTube:系统学习区块链、Solidity和前后端全栈Web3开发课程相关的资源GitHub:https://github.com/smartcontractkit/full-blockchain-solidity-course-js第1课-课程指导第2课-区块链基础知识第3课-Remix介绍(SimpleStorage示例)第4课-使用Remix完成FundMe智能合约第5课-Ether.js介绍(SimpleStorage示例)第6课-Hardhat介绍(SimpleStorage示例)第7课-使用Hardhat完成FundMe智能合约第8课-使用HTML/Javascript完成F
YouTube:系统学习区块链、Solidity和前后端全栈Web3开发课程相关的资源GitHub:https://github.com/smartcontractkit/full-blockchain-solidity-course-js第1课-课程指导第2课-区块链基础知识第3课-Remix介绍(SimpleStorage示例)第4课-使用Remix完成FundMe智能合约第5课-Ether.js介绍(SimpleStorage示例)第6课-Hardhat介绍(SimpleStorage示例)第7课-使用Hardhat完成FundMe智能合约第8课-使用HTML/Javascript完成F
Solidity简介solidity是为实现智能合约而创建的一个高阶编程语言。也是以太坊虚拟机(EVM)智能合约的语言。Solidity开发工具remixremix是以太坊官方推荐的在线开发工具,适合新手。 在线开发网址:remix.ethereum.org下面讲解从创建第一个helloworld程序到编译智能合约到部署智能合约。1.创建hello_worlod.sol文件打开在线网址,左上角菜单有三个按钮,分别为文件、搜索、编译、部署。点击新建,创建一个hello_world.sol文件如下:我们拆开分析,学习solidity代码源文件的结构,需要注意的地方:第1行是注释,会写一下这个代码所