Clarity 智能合约开发教程|正确理解有符号和无符号整数、布尔值和主体用户。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gitandgit
V2EX    区块链

Clarity 智能合约开发教程|正确理解有符号和无符号整数、布尔值和主体用户。

  •  
  •   gitandgit 2021-09-20 17:26:13 +08:00 1019 次点击
    这是一个创建于 1556 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原英文文档链接: https://book.clarity-lang.org/ch02-01-primitive-types.html

    原始类型

    原始类型是最基本的组件。它们是:有符号和无符号整数、布尔值和主体用户。

    有符号整数

    int,(有符号)整数的缩写。这些是 128 位数字,可以是正数也可以是负数。最小值为 -2 的 127 次方,最大值为 2 的 127 次方 - 1 。一些示例:0 、5000 、-45 。

    无符号整数

    uint,无符号整数的缩写。这些是只能为正数的 128 位数字。因此最小值为 0,最大值为 2 的 128 次方 - 1 。 无符号整数总是以字符 u 为前缀。一些示例:u0 、u40935094534 。

    Clarity 有许多内置函数,它们接受有符号或无符号整数。

    加法:

    (+ u2 u3) 

    减法:

    (- 5 10) 

    乘法:

    (* u2 u16) 

    除法:

    (/ 100 4) 

    请注意,整数总是整数没有小数点。在写代码时要记住这一点。

    (/ u10 u3) 

    如果您将上述内容输入计算器,您可能会得到 3.3333333333.... 不是整数!上面的表达式计算结果为 u3,小数部分被舍弃。

    还有更多的函数将整数作为输入。我们将在本书后面讨论其余部分。

    布尔值

    bool,布尔值的缩写。布尔值是 true (真)或者 为 false (假)。它们用于检查某个条件是否满足或未满足(真或假)。一些接受布尔值的内置函数:

    not (反转布尔值):

    (not true) 

    and (如果所有的输入都是 true,则返回 true):

    (and true true true) 

    or (如果有一个输入是 true,则返回 true):

    (or false true false) 

    主体用户

    principal (主体)是 Clarity 中的一种特殊类型,代表区块链上的一个 Stacks 地址。它是一个唯一标识符,您可以大致等同于电子邮件地址或银行帐号尽管绝对不一样!您可能也听说过钱包地址这个词。Clarity 接受两种不同类型的主体用户:标准主体用户和合约程序主体用户。标准主体用户由相应的私钥支持,而合约程序主体用户指向智能合约。主体用户遵循特定的结构,并且始终以字符 SP 开头,代表 Stacks 主网。以 ST 开头,代表测试网络和模拟网络。

    在 Clarity 中,文字主体用户值以单引号 (') 为前缀。请注意,没有结束单引号。

    'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE 

    合约主体用户是部署合约的标准主体用户和合约程序名称的复合体,由点分隔:

    'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-awesome-contract 

    在编写 Clarity 时,您将经常使用主体用户类型。它用于检查谁在调用合约程序、记录有关不同主体用户的信息、跨合约的函数调用等等。

    要检索主体用户的当前 STX 余额,我们可以将其传递给 stx-get-balance 函数。

    (stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE) 

    两种主体用户都可以持有代币,因此我们也可以检查合约的余额。

    (stx-get-balance 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE.my-contract) 

    零余额有点无聊,所以让我们发送一些 STX 给一个主体用户:

    (stx-transfer? u500 tx-sender 'ST1HTBVD3JG9C05J7HBJTHGR0GGW7KXW28M5JS8QE) 

    请正确理解原始类型,以及不同类型永远不能混合的事实,现在,你就会很明白为什么上一节中的示例不起作用。由于第一个数字是一个有符号整数,而下一个数字是一个无符号整数注意 u分析器将代码视为无效而拒绝。我们应该为它提供两个有符号或两个无符号整数。

    不正确示例:

    (+ 2 u3) 

    正确示例:

    (+ u2 u3) 
    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1440 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:49 PVG 00:49 LAX 08:49 JFK 11:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86