区块链编程
综述
从应用开发的角度来说,分布式应用的场景没有那么多。因为它的存储效率不高,计算效率,通信效率也不高。在中心化应用面前没有应用场景上的优势。区块链可以实现的,中心化应用都可以更高效的实现。唯一的优势在于去中心化和不可篡改。我认为还是要和中心化的东西相结合。
而且智能合约一旦部署就不能更改。这一点就决定了它没法做大型的应用。
存储在每一个链上节点,效率很低。
基础数据结构
uint int uint=uint256
string
mapping
address 每个地址可能是一个账户,也可能是一个合约。address内置了一些方法,如balance、transfer等
sturct 用.来方法结构体内的变量
storage&memory 放在类型的后面,用于修饰变量
storage保存在链上,memory保存在每次函数的调用中
State variables (variables declared outside of functions) are by default storage
and written permanently to the blockchain, while variables declared inside functions are memory
and will disappear when the function call ends.
时间单位 days
支付单位 ether
语法
头部
版本号
pragma solidity >=0.5.0 <0.6.0;
包引入
import “./zombiefactory.sol”;
事件 event
用于与前端交互的事件。定义类似function。需要别的函数来emit触发它。
合约 contract
结构体,函数都需要写在合约里面。合约有点像类,可以继承。
函数
public and private private不能被继承
Internal and External
internal的函数只能在合约内部被调用,external的函数只能在合约外部被调用。内外部的限制也会被继承
名称
参数
返回值 可以约定返回值的类型,可以多值返回 returns(uint a, uint b, uint c),接受的时候也需要多值接收(,,c)=func(),空变量留空
require
当require括号内的条件为true的时候才会执行,否则抛出error
makes it so that the function will throw an error and stop executing if some condition is not true:
interface 也是contract 但是不需要实现function
modifier
修饰器 用来修饰函数 定义类似函数
modifier的末尾都需要加一个_;不知道为什么
address(this)是什么?获取当前的调用者?
payable
用来修饰函数,需要支付
继承
is ,父合约的声明的结构体、变量、函数都可以继承
标准
ERC20 tokens share the same set of functions with the same names
ERC721 每个token都不愿意 也就是NFT
每个NFT合约需要实现ERC721里的函数,如transfer ownerOf Approve balanceOf等
全局函数
now 返回当前时间戳
msg.sender 返回调用者的address
abi.encodePacked
keccak256
前端使用
<script language=”javascript” type=”text/javascript” src=”web3.min.js”></script>
参考教程
我自己是照着这个教程敲下来的。非常简洁明了,比我买的几本书效果都好。
最后更新于 2023年2月6日 by qlili