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

2021-09-20 17:26:13 +08:00
 gitandgit

原英文文档链接: 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)

628 次点击
所在节点    区块链
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/803060

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX