solidity智能合约开发简介
什么是智能合约呢?
智能合约不能单单理解为合约,因为它并不智能也并非合约,那从开发者的角度去看待的话,他就是一个在区块链上的程序对象,在整个区块链上的应用程序。所有人都可以看到智能合约,因为这些智能合约的代码和状态都在区块链上。而且,与网络服务器不同的是,智能合约不依赖某个特定的硬件设备。
从用户角度来讲,智能合约通常被认为是一个自动担保账户,例如,当特定的条件满足时,程序就会释放和转移资金。
例子: 在以太坊上注册域名
pragma solidity ^0.5.0;
contract MyRegistry {
mapping ( string => address ) public registry;
function registerDomain(string memory domain) public {
// Can only reserve new unretistered domain names require(registry[domain] =address(0));
// Update the owner of this domain
registry[domain]=msg.sender;
}
第一行solidity pragma
一个 pragma 指令指示 Solidity 编译器运行智能合约的版本。
下面的 pragma 指令显示智能合约是为 Solidity 版本 0.5.0编写的。^符号表示 Solidity 程序不应与低于 0.5.0的版本使用。
pragma solidity ^0.5.0;
pragma 指令始终位于源文件的本地,这意味着您必须将其添加到所有源文件中。
合约的名字就是myregistry。
Solidity 中有 3 种主要类型的变量:局部变量、状态变量和全局变量。
局部变量这些是在solidity 函数中声明的变量,它们不存储在区块链上。
状态变量是在solidity函数之外声明的变量,他们永远存储在区块链上。
Solidity 全局变量是其他函数可以访问的变量。它们保存有关区块链及其交易属性的信息。
第二行代码的意思就是把它映射带一个地址上,除此之外,在储存上,智能合约可以执行用户输入指令的函数,可以通过写一个字符串来进行一个唤醒。
下面总的代码就是来检查,首先,这个域名有没有被其他人所拥有,下一行就是更新存储文件,比如说你就是这个域名的拥有者。
function registerDomain(string memory domain) public {
// Can only reserve new unretistered domain names require(registry[domain] =address(0));
// Update the owner of this domain
registry[domain]=msg.sender;
}
合约直接能不能进行交互呢?这是可以的,使用者不仅可以唤醒一个合约对象他的一些函数功能,而且合约对象的代码也会描述它如何发送信息如何唤醒另外一个合约,常见的就是一个多签的一个模式。意思是许多不同的使用者来共同控制合约的资产,多签之后每个人都有这个权限,所以有这个多签的权限,那么相互之间就可以相互交互。
重温到目前为止刚学的合约编程模型
合约类别: 定义合约的程序代码及存储变量
合约对象:一个存在于区块链上的类别实例
存储字段:由合约存储的变量
函数/方式: 可被唤醒来跑既定代码,更新合约状态
访问控制:使用“require(”来取消一些未被授权的交易。你也可以
用它来检视调用这个函数的调用者
组合: 在多个合约之间的交互。