Characteristics of NFT digital collections
NFT-based digital collections have unique,indivisible,tamper-proof,verifiable,scarce and other technical characteristics:
(1)Uniqueness:Each digital collection has a unique identification on a specific chain,which can represent a certain asset object in the digital or real world.
(2)Indivisibility:each digital collection is indivisible and can represent a specific digital collection.
(3)Non-tamper:based on the non-tamper feature of NFT,the digital collection's attributes,ownership information,historical transaction records and other information are stored in the anti-tamper chain data structure.
(4)Verifiable:The information on NFT is open and transparent,and all users can query and verify the ownership information of digital collections.
(5)Scarcity:In the Internet era,the threshold for information replication is low and the value is difficult to be recognized.The NFT digital collection is unique,has clear ownership,can be permanently preserved,and has scarcity,so that the NFT-based digital collection has a stronger premium ability.
contract关键字:用于声明一个合约
data和owner:是两个状态变量。data包含一些数据,owner包含所有者的以太坊钱包地址,即部署合约者的以太坊地址
event logData定义事件logData,用于通知客户端:一旦data发生变化,将触发这个事件。所有事件都保存在区块链中。
函数修改器:onlyOwner。修改器用于在执行一个函数之前自动检测文件。这里的修改器用于检测合约所有者是否在调用函数。如果没有,则会抛出异常。
合约函数构造器constructor:在部署合约时,构造器用于初始化状态变量。
function,getData()用于得到data状态变量的值,setData()用于改变data的值。
基本类型
除了数组类型、字符串类型、结构类型、枚举类型和map类型外,
其他类型均称为基本类型。
无符号型:例如uint8,uint16,uint24,…,uint256分别用于存储无符号的8位,16
位,24位,…,256位整数
有符号型:例如,int8,int16,…,int256分别用于存储8位,16位,24位,…,256位整数
address类型:用于存储以太坊地址,用16进制表示。address类型有两个属性:balance和send。balance用于检测地址余额,send用于向地址发送以太币。send方法拿出需要转账那
些数量的wei,并根据转账是否成功返回true或者false。
注意:
uint和int是uint256和int256的别名。
如果一个数字超过256位,则使用256位数据类型存储该数字的近似值。
数组:Solidity支持generic和byte两种数组类型。
数组有length属性,用于发现数组的长度。
注意:不可以在内存中改变数组大小,也不可以改变非动态数组大小。
字符串类型
有两种方法创建字符串:使用bytes和string。
bytes用于创建原始字符串,而string用于创建UTF-8字符串
示例:
contract sample{
string myString="";//string
bytes myRawString;
function sample(string initString,bytes rawStringInit){
myString=initString;
string storage myString2=myString;
string memory myString3="ABCDE";
myString3="imaginecode";
myRawString=rawStringInit;
myRawString.length++;
}
}
结构类型struct
示例
contract sample{
struct myStruct{
bool myBool;
string myString;
}
myStruct s1;
myStruct s2=myStruct{true,""};
function sample(bool initBool,string initString){
s1=myStruct(initBool,initString);
myStruct memory s3=myStruct(initBool,initString);
}
}
注意:函数参数不可以是结构类型,且函数不可以返回结构类型。
枚举类型enum
contract sample{
enum OS{OSX,Linux,Unix,windows}
OS choice;
function sample(OS chosen){
choice=chosen;
}
function setLinux(){
choice=OS.Linux;
}
function getChoice return(OS chosenOS){
return choice;
}
}