V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gitandgit
V2EX  ›  区块链

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

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

    原英文文档链接: 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   ·   实用小工具   ·   2963 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:10 · PVG 21:10 · LAX 05:10 · JFK 08:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.