为了编写智能合约,你必须使用智能合约语言(SCL)。这些是直接编写智能合约或编译成智能合约的编程语言。Solidity是一种编写智能合约的编程语言,它在以太坊虚拟机上运行。它是一种面向合约的高级语言,其语法类似于JavaScript,主要针对以太坊EVM。
区块链等技术的参与。区块链是Web3.0最突出的关键技术,助力安全、透明和防篡改的交易。Web3.0同时也包含其他机制促进和推动去中心化,如云计算、AR Cloud和其他网络空间关键技术等;
Web3.0推动分布式经济模型的实现,如NFT、Defi、加密货币和去中心化自治组织(DAO)。Web3.0共建共享的特性,与Web2.0中用户仅作为使用者不同,使Web3.0中用户能主动参与共建与共治,以DAO的组织形式,利用区块链技术和智能合约进行规则制定与执行,共担共享平台或协议的价值。
Web3.0是用于开发去中心化应用程序的新技术堆栈。这些技术主要包括:如作为信任验证机制的区块链、隐私保护和互操作协议、去中心化基础设施和应用平台、去中心化身份以及去中心化金融等,以共同实现去中心化的共荣生态网络愿景。
constexpr uint8_t length()const{
constexpr uint64_t mask=0xF800000000000000ull;
if(value==0)
return 0;
uint8_t l=0;
uint8_t i=0;
for(auto v=value;i<13;++i,v<<=5){
if((v&mask)>0){
l=i;
}
}
return l+1;
}
//返回一个name对象的后缀,完整的运算方法。
constexpr name suffix()const{
uint32_t remaining_bits_after_last_actual_dot=0;
uint32_t tmp=0;
for(int32_t remaining_bits=59;remaining_bits>=4;remaining_bits-=5){//remaining_bits必须有符号整数
//从左到右依次遍历name中的字符,共12次
auto c=(value>>remaining_bits)&0x1Full;
if(!c){//如果当前字符是点
tmp=static_cast<uint32_t>(remaining_bits);
}else{//如果当前字符不是点
remaining_bits_after_last_actual_dot=tmp;
}
}
uint64_t thirteenth_character=value&0x0Full;
if(thirteenth_character){//如果第13个字符不是点
remaining_bits_after_last_actual_dot=tmp;
}
if(remaining_bits_after_last_actual_dot==0)//除了潜在的前导点之外,name中没有实际的点
return name{value};
//此时,remaining_bits_after_last_actual_dot必须在4到59的范围内(并且限制为5的增量)。
//除了4个最低有效位(对应于第13个字符)之外,对应于最后一个实际点之后的字符的剩余位的掩码。
uint64_t mask=(1ull<<remaining_bits_after_last_actual_dot)-16;
uint32_t shift=64-remaining_bits_after_last_actual_dot;
return name{((value&mask)<<shift)+(thirteenth_character<<(shift-1))};
}
//将name类型转为raw枚举类型:基于name对象的值,返回一个raw枚举类型的实例。
constexpr operator raw()const{return raw(value);}
//显式转换一个name的uint64_t值为bool,如果name的值不为0,返回true。
constexpr explicit operator bool()const{return value!=0;}
//根据给定的char缓冲区,以字符串的类型写入name对象。参数begin:char缓冲区的开头,参数end:刚好超过char缓冲区的位置,作为结尾。
charwrite_as_string(charbegin,char*end)const{
static const char*charmap=".12345abcdefghijklmnopqrstuvwxyz";
constexpr uint64_t mask=0xF800000000000000ull;
if((begin+13)<begin||(begin+13)>end)return begin;
auto v=value;
for(auto i=0;i<13;++i,v<<=5){
if(v==0)return begin;
auto indx=(v&mask)>>(i==12?60:59);
*begin=charmap[indx];
++begin;
}
return begin;
}
//将name对象转为一个字符串返回。
std::string to_string()const{
char buffer[13];
auto end=write_as_string(buffer,buffer+sizeof(buffer));
return{buffer,end};
}
//重载运算符等于号
friend constexpr bool operator==(const name&a,const name&b){
return a.value==b.value;
}
//重载运算符符不等于
friend constexpr bool operator!=(const name&a,const name&b){
return a.value!=b.value;
}
//重载运算符小于号
friend constexpr bool operator<(const name&a,const name&b){
return a.value<b.value;
}
uint64_t value=0;//其实name对象只有一个有效属性,就是value,以上都是name对象的构造方式、限制条件、各种转型以及运算符重载。
EOSLIB_SERIALIZE(name,(value))
};