计算机

区块链编程

综述

从应用开发的角度来说,分布式应用的场景没有那么多。因为它的存储效率不高,计算效率,通信效率也不高。在中心化应用面前没有应用场景上的优势。区块链可以实现的,中心化应用都可以更高效的实现。唯一的优势在于去中心化和不可篡改。我认为还是要和中心化的东西相结合。

而且智能合约一旦部署就不能更改。这一点就决定了它没法做大型的应用。

存储在每一个链上节点,效率很低。

基础数据结构

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

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x