solidity-16-ERC721
ERC-721ERC-721是以太坊上的一种标准协议,用于非同质化Token(Non-Fungible Tokens,NFT)的创建和交易。这篇文章将介绍ERC-721的概念、特点以及实现方式。
什么是ERC-721?ERC-721是以太坊上的一个标准协议,用于创建和交易非同质化Token(NFT)。NFT是一种数字资产,与其他Token不同,每一个NFT都是独特的,具有不可替代性。比如,一张画作或者一件珍品就是NFT的例子。通过ERC-721协议,开发者可以创建自己的NFT,并将其在以太坊上进行交易。
ERC-721的特点与ERC-20协议不同,ERC-721协议的每一个Token都是唯一的,没有可替代性。这意味着每一个NFT都有其独特的标识符,称为tokenId。因此,ERC-721协议的实现需要支持这种不可替代性,确保每一个tokenId只能被拥有者所拥有。
另外,ERC-721还支持多样化的交易方式。与ERC-20协议只支持简单的Token交易不同,ERC-721可以支持更多复杂的交易,比如拍卖和租赁等。
ERC-721是以太坊上的一个标准协议,用于创建和交易非同质化Token ...
solidity-15-ERC20
什么是ERC20 Token?ERC20 Token是建立在以太坊区块链上的 Token。ERC20 Token是通过以太坊智能合约创建的,这意味着 Token的供应量、转移规则和其他属性都可以在智能合约中定义和控制。
ERC20 Token由于ERC20 Token建立在以太坊区块链上,因此可以与以太坊智能合约进行交互。
如何创建ERC20 Token?创建ERC20 Token需要编写一个智能合约,并将其发布到以太坊网络上。以下是创建ERC20 Token的基本步骤:
编写智能合约代码:ERC20 Token的智能合约代码可以使用Solidity等智能合约编程语言编写。智能合约需要定义Token的名称、符号、供应量、转移规则等属性。
发布智能合约:智能合约需要发布到以太坊网络上,通常使用以太坊开发工具如Remix、 HardHat等。
分发Token:Token的供应量需要在智能合约中定义,然后可以使用特定的函数将 Token发送给地址。
如何转移ERC20 Token?要转移ERC20 Token,您需要知道以下三个关键信息:
ERC20 Token合约地址:ERC2 ...
solidity-14-全局变量
block相关
block.number 它指的是区块链上的一个块的编号。在区块链上,块是一组交易的集合,他们是按线性、时间顺序添加到链上。每个块都有一个唯一的编号,也叫”块高”,它在被添加到链上时分配。块编号可用于在区块链中识别和引用特定块。
block.timestamp 它指区块链上的一个块的时间戳。按线性、时间顺序添加到链上。每个块有一个时间戳,在它被添加到链上时分配。
block.difficulty 它指的是在区块链上生成一个新块所需要的难度。
block.coinbase 它指的是区块链上的一个块的coinbase交易。在区块链上,每个新块都会一笔coinbase交易,这笔交易是为了奖励矿工在挖掘新块时所做出的贡献而生成的。coinbase交易通常是块链上的第一笔交易,并且不需要输入。这笔交易的输出会被用来发放挖矿奖励。
block.blockhash 它指区块链上一个块的哈希值。在区块链上,每个块都有一个唯一的哈希值,用来验证区块的完整性和不可变性。
block.gaslimit 它指当前区块的最大可用gas限制。是uint类型的值。它是全局的,在每次执行之前可以访问, ...
solidity-13-可见性
public公开的,表示可以在合约内部和外部调用。都支持外部访问。
private私有的,表示只能在合约内部调用。
internal内部的,表示只能在合约内部调用。在0.5版本以后,已经废弃,建议使用private替代。
external外部的,表示只能该在外部调用。状态变量不支持external类型。只支持外部函数访问,如果内部函数访问会报错。
对于,public、internal、private的状态变量都支持合约内部函数的访问。
123456789101112131415161718pragma solidity ^0.8.0;contract MyContract { // 只能在外部调用 function externalFunction() external { //... } // 可以在合约内部和外部调用 function publicFunction() public { //... } // 只能在合约内部调用 function privat ...
solidity-12-memory-storage
memorymemory关键字用来声明一个存储在EVM临时内存区中的变量。使用memory声明的变量不会存储在区块链上,在函数调用结束后不可访问。
定义一个memory变量12345678pragma solidity ^0.8.0;contract Lesson12{ function myFunction() public pure{ uint256 myMemoryVariable; myMemoryVariable=0; }}
在函数中使用memory变量1234 function setData2(uint256 value) public pure{ uint256 myMemoryVariable; myMemoryVariable = value;}
storagestorage关键字用于声明一个存储在EVM持久存储区域中的变量。这些变量在合约部署后会持久化在区块链上,可以在之后的效用中读取和修改。
定义一个storage变量
12345678910p ...
solidity-11-值类型与引用类型
值类型值类型的特点就是传递的时候,会临时拷贝一份内容,对新拷贝出来的这份内容无论做任何操作,不会影响原来参数的值。Solidity值类型如下:
整型
布尔
地址
定长字节数组
枚举
函数
引用类型当参数传递的时候,对参数变量的修改,原始值也会跟着变化,因为新旧2个变量都指向一个地址的原因。在Solidity中,引用类型如下:
字符串
结构体
映射
不定长字节数组
solidity-10-映射-Mapping
mapping是一种用于存储k/v的数据类型,它可以建立映射关系,将一个值映射到另一个值。它的k可以是任何类型。
12345678910111213141516171819202122pragma solidity ^0.8.0;contract lesson10{ struct Employee { address addr; uint amount; } uint num; mapping(uint=>Employee) public employeeMap; function newEmployee(address addr, uint amount) public returns (uint) { uint employeeID = num++; // 创建一个结构体实例,存储在storage ,放入mapping里 employeeMap[employeeID] = Employee(addr, amount); & ...
solidity-09-结构体
结构体是一种自定义复杂数据类型的数据结构。它可以包含多个字段,每个字段都可以是不同的数据类型。结构体可以被用来存储复杂的数据。
12345678910111213141516171819202122pragma solidity ^0.8.0;contract Lesson09{ struct Account { address owner; uint balance; } Account acc; Account accStorage = Account({owner:address(0x7F7B198684E3CdB54397438FAd4C8442f34b9bd9),balance:10}); function initMemoryVar() pure public{ Account memory accMemory = Account({owner:address(0x7F7B198684E3CdB54397438FAd4C8442f34 ...
solidity-08-地址-Address
在solidity中,Address(地址)是一种数据类型,代表着一个20个字节(1个字节占8位,一共占160位)的以太坊地址。它是用来存储智能合约地址或以太坊账户的地址,可用于发送Ether或者调用合约函数等操作。地址是以太坊上的唯一标识符,可以用16进制表示,一个16进制数字占4个字节,前缀是0x,所以16进制钱包地址的长度是40(160/4=40).地址类型就是uint160。
123456789101112131415161718192021222324pragma solidity ^0.8.0;contract AddressDemo{ address owner; uint160 addrBits; constructor() public{ owner = msg.sender; } function getOwner() view public returns (address){ return owner; } func ...
solidity-07-字符串的操作
字符串使用 “”或’’表示.
字符串基本使用1234567891011121314151617pragma solidity ^0.8.0;contract StringDemo{ string _name; constructor(string memory name) { _name = name; } function setName(string memory name) public { _name = name; } function getName() view public returns (string memory){ return _name; }}
字符串的比较12345678910pragma solidity ^0.8.0;contract StringDemo{ //... function compareString(string memory str1,strin ...