智能合约是一种自动运行的计算机程序,在满足特定条件时会自动执行。
区块链上的智能合约是把前述计算机代码部署到公链上,使其在公链上自动运行。智能合约的签署和执行过程中的每一步都形成一个区块,并根据分布式记账原理被记录于链上每个节点。
///Immutable except for fc::from_variant.
struct name{
private:开发详情:MrsFu123
friend struct fc::reflector<name>;
friend void fc::from_variant(const fc::variant&v,eosio::chain::name&check);
void set(std::string_view str);
std::string to_string()const;
constexpr uint64_t to_uint64_t()const{return value;}
//构建一个新的name对象,初始化默认为0
constexpr name():value(0){}
//使用给定的unit64_t类型的值构建一个新的name对象。
constexpr explicit name(uint64_t v):value(v){}
//使用给定的一个范围的枚举类型,构建一个新的name对象。
constexpr explicit name(name::raw r):value(static_cast<uint64_t>(r)){}
//使用给定的字符串构建一个新的name对象。
constexpr explicit name(std::string_view str):value(0){
if(str.size()>13){//字符串最长不能超过12
eosio::check(false,"string is too long to be a valid name");
}
if(str.empty()){
return;
}
//将字符串转为uint64_t
auto n=std::min((uint32_t)str.size(),(uint32_t)12u);
for(decltype(n)i=0;i<n;++i){
value<<=5;
value|=char_to_value(str);
}
value<<=(4+5*(12-n));
if(str.size()==13){
uint64_t v=char_to_value(str[12]);
if(v>0x0Full){
eosio::check(false,"thirteenth character in name cannot be a letter that comes after j");
}
value|=v;
}
}
//将一个Base32符号的char转换为它对应的值。
static constexpr uint8_t char_to_value(char c){
if(c=='.')
return 0;
else if(c>='1'&&c<='5')
return(c-'1')+1;
else if(c>='a'&&c<='z')
return(c-'a')+6;
else//字符中出现了不允许的内容。
eosio::check(false,"character is not in allowed character set for names");
return 0;//流程控制将不会到达这里,这一行是为了防止warn信息。
}