坚固性

Solidity是一种编程语言,用于编写在区块链上的以太坊虚拟机上运行的智能合约。它是一种面向合约的高级语言,其语法与JavaScript相似,并且旨在以太坊虚拟机。借助Solidity,我们可以编写模拟众筹活动,彩票,贷款或任何其他类型的金融工具的应用程序。

  • 智能合约:智能合约是具有程序代码的计算机程序,该代码可以实现两个或多个参与方之间的合约协议(规则)。智能合约中编码的规则由物理世界中的事件触发,并自动执行一些预定义的操作。所有这些都不需要任何中介,Web服务器或后端数据库。例如:Ebay是买卖双方之间的中介。每次买家从卖家那里购买商品时,EBay都会赚取$。在去中心化投标应用程序中,智能合约可以代替中介EBay。合约中编码的规则是,当买方付款时,卖方将把物品运送给买方。资金将保留在智能合约中,直到买方确认收到货为止。一旦买方确认收货,资金将被释放给卖方。智能合约是在以太坊网络节点上执行的,而不是中介机构(例如Ebay)拥有的中心化服务器基础架构。节点是在网络参与者的计算机上运行的以太坊客户端进程。
  • 以太坊虚拟机:以太坊虚拟机专注于提供安全性并由世界各地的计算机执行不受信任的代码。更具体地说,该项目专注于防止拒绝服务攻击,这种攻击在加密货币世界中已变得很普遍。此外,EVM确保程序无法访问彼此的状态,从而确保可以在没有任何潜在干扰的情况下建立通信。以太坊虚拟机旨在用作运行时环境。正如大多数加密货币发烧友所了解的那样,如今智能合约非常受欢迎。该技术可用于在以太坊区块链上自动进行交易或执行特定操作。

由于以太坊虚拟机与主网络的其余部分完全隔离,因此它是一个完美的测试环境。任何希望创建智能合约的公司都可以使用EVM来做到这一点,而不会影响主要的区块链运营。测试该技术至关重要,因为即使最激动人心的智能合约,有缺陷的代码也可能导致消亡。此外,人们可以将EVM视为一种“学习环境”,以构建更大,更好,更强大的智能合约。

还值得一提的是,网络中的每个以太坊节点都运行自己的EVM实现,并能够执行相同的指令。它是构建适当的智能合约的门户,对于希望使用Solidity语言动手实践的新手和经验丰富的编码人员而言都是如此。此外,EVM已用Python,Ruby,C ++和其他一些编码语言实现。

很高兴知道有用于智能合约技术的沙盒环境。通过智能合约可以实现世界上许多日常业务的去中心化,以太坊虚拟机将在此过程中发挥重要作用。对于那些热衷于编码技巧的开发人员而言,它是一种不仅有价值而且免费的工具。

  • Solidity:Solidity Language是我们用来生成可在EVM上执行的机器级代码的工具,它是一种带有编译器的语言,它将我们的高级人类可读代码分解为简单的指令,例如“放入数据”到一个寄存器中”,“从两个寄存器中添加数据”,“在存储点xxxxx处跳回指令”,它们构成了任何微处理器可执行程序的基础。因此,Solidity语言只是可以编译为EVM字节码的几种语言中的一种,另一种执行相同功能的语言称为Serpent。每种语言可能都有几种编译器工具,但是它们都具有相同的作用,即生成要在以太坊节点上运行以进行支付的EVM机器级字节码。

坚固性的基本概念:

  1. 类型:Solidity是一种静态类型的语言,这意味着需要在编译时指定每个变量的类型(状态和局部)。实体提供了几种基本类型,可以将它们组合起来以形成复杂类型。
  2. 值类型:以下类型也称为值类型,因为这些类型的变量将始终按值传递,即,在将它们用作函数参数或在赋值中时始终将其复制。
  • 布尔值

bool:可能的值为常数true和false。

运营商:

  • (逻辑否定)
  • &&(逻辑与,“和”)
  • || (逻辑或,“或”)
  • ==(平等)
  • =(不等式)

运营商||和&&应用常见的短路规则。这意味着在表达式f(x)||中g(y),如果f(x)评估为true,则即使有副作用,也不会评估g(y)。

4.整数:int / uint:各种大小的有符号和无符号整数。关键字uint8

到uint256的步长为8(8位无符号,最多256位),从int8到int256。 uint和int分别是uint256和int256的别名。

运营商:

  • 比较:<=, <, ==, !=, >=,>(评估为bool)
  • 位运算符:&,|,^(按位异或),〜(按位取反)
  • 班次运算符:<< (left shift), >>(右移)
  • 算术运算符:+,-,一元运算符-,*,/,%(取模),**(取幂)
  1. 位运算:位运算以数字的两位补码表示。这意味着,例如〜int256(0)== int256(-1)。

6.移位:移位操作的结果具有左操作数的类型。表达式x << y is equivalent to x * 2**y, and, for positive integers, x >> y等于x / 2 ** y。对于负x,x >> y等于在向下舍入时(朝负无穷大)除以2的幂。负数移位会引发运行时异常。

7.加法,减法和乘法:加法,减法和乘法具有通常的语义。它们使用两个补码表示,这意味着例如uint256(0)– uint256(1)== 2 ** 256 –1。在设计安全智能合约时,必须考虑这些溢出。

表达式-x等效于(T(0)– x),其中T是x的类型。这意味着,如果x的类型是无符号整数类型,则-x不会为负。同样,如果x为负,则-x可以为正。两个人的补码表示法也引起了另一个警告:

例如:int x = -2 ** 255;断言(-x == x);

8.除:由于运算结果的类型始终是操作数之一的类型,因此对整数的除法始终会导致整数。在Solidity中,除法将取整为零。这意味着int256(-5)/ int256(2)== int256(-2)。

9.取模:取操作数a除以操作数n之后,取模a%n将得到余数r,其中q = int(a / n)和r = a –(n * q)。这意味着取模的结果与其左操作数的符号相同(或为零),并且%n ==-(abs(a)%n)对负a成立:

  • int256(5)%int256(2)== int256(1)
  • int256(5)%int256(-2)== int256(1)
  • int256(-5)%int256(2)== int256(-1)
  • int256(-5)%int256(-2)== int256(-1)

10.幂运算:幂运算仅适用于无符号类型。请注意,您使用的类型足够大以容纳结果并准备潜在的盘点行为。

注意:0 ** 0 EVM为1。

  1. 定点编号:fixed / ufixed:各种大小的有符号和无符号定点编号。关键字ufixedMxN和fixedMxN,其中M表示类型占用的位数,N表示可用的小数点位数。 M必须被8整除,并且必须从8到256位。 N必须介于0到80之间(含0和80)。 ufixed和fixed分别是ufixed128x18和fixed128x18的别名。

运营商:

  • 比较:<=, <, ==, !=, >=,>(评估为bool)
  • 算术运算符:+,-,一元运算符-,*,/,%(取模)
  1. 地址:地址类型有两种,基本上相同:
  • 地址:持有20字节的值(以太坊地址的大小)。
  • 应付地址:与地址相同,但其他成员进行转移和发送。

这种区别背后的想法是,应付地址是可以发送以太币的地址,而普通地址不能发送以太币。

  1. 类型转换:

允许从应付地址到地址的隐式转换,而不可能从地址到应付地址的转换(执行这种转换的唯一方法是使用中间转换到uint160)。地址文字可以隐式转换为应付帐款。

对于整数,整数文字,bytes20和合约类型,允许进行显式来回地址转换,但要注意以下几点:不允许格式为payable(x)的地址转换。取而代之的是,如果x是整数或固定字节类型,则格式为address(x)的转换结果具有应付类型的地址,带有应付款回退功能的文字或合约。如果x是没有应付款回退功能的合约,则address(x)将是address类型。在外部功能签名中,地址和地址应付款类型均使用地址。

帖子Solidity首先出现在Nvest Labs。

资讯来源:由0x资讯编译自NVESTLABS。版权归作者archana所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢