NFT质押分红dapp系统开发模式智能合约定制详情

简介: NFT质押分红dapp系统开发模式智能合约定制详情

简单的智能合约

让我们先看一下最基本的例子。

存储

pragma solidity ^0.4.0;contract SimpleStorage {
uint storedData;

function set(uint x) public {

   storedData = x;

}

function get() public constant returns (uint) {

   return storedData;

}}

第一行就是告诉大家源代码使用Solidity版本0.4.0写的,并且使用0.4.0以上版本运行也没问题(最高到0.5.0,但是不包含0.5.0)。这是为了确保合约不会在新的编译器版本中突然行为异常。关键字 pragma 的含义是,一般来说,pragmas(编译指令)是告知编译器如何处理源代码的指令的(例如, pragma once )。

Solidity中合约的含义就是一组代码(它的 函数 )和数据(它的 状态 ),它们位于以太坊区块链的一个特定地址上。 代码行 uint storedData; 声明一个类型为 uint (256位无符号整数)的状态变量,叫做 storedData 。 你可以认为它是数据库里的一个位置,可以通过调用管理数据库代码的函数进行查询和变更。对于以太坊来说,上述的合约就是拥有合约(owning contract)。在这种情况下,函数 set 和 get 可以用来变更或取出变量的值。

要访问一个状态变量,并不需要像 this. 这样的前缀,虽然这是其他语言常见的做法。

该合约能完成的事情并不多(由于以太坊构建的基础架构的原因):它能允许任何人在合约中存储一个单独的数字,并且这个数字可以被世界上任何人访问,且没有可行的办法阻止你发布这个数字。当然,任何人都可以再次调用 set ,传入不同的值,覆盖你的数字,但是这个数字仍会被存储在区块链的历史记录中。随后,我们会看到怎样施加访问限制,以确保只有你才能改变这个数字。

注解

所有的标识符(合约名称,函数名称和变量名称)都只能使用ASCII字符集。UTF-8编码的数据可以用字符串变量的形式存储。

小心使用Unicode文本,因为有些字符虽然长得相像(甚至一样),但其字符码是不同的,其编码后的字符数组也会不一样。

子货币(Subcurrency)例子

下面的合约实现了一个最简单的加密货币。这里,币确实可以无中生有地产生,但是只有创建合约的人才能做到(实现一个不同的发行计划也不难)。而且,任何人都可以给其他人转币,不需要注册用户名和密码 —— 所需要的只是以太坊密钥对。

pragma solidity ^0.4.21;contract Coin {
// 关键字“public”让这些变量可以从外部读取
address public minter;
mapping (address => uint) public balances;

// 轻客户端可以通过事件针对变化作出高效的反应
event Sent(address from, address to, uint amount);

// 这是构造函数,只有当合约创建时运行
function Coin() public {

   minter = msg.sender;

}

function mint(address receiver, uint amount) public {

   if (msg.sender != minter) return;
   balances[receiver] += amount;

}

function send(address receiver, uint amount) public {

   if (balances[msg.sender] < amount) return;
   balances[msg.sender] -= amount;
   balances[receiver] += amount;
   emit Sent(msg.sender, receiver, amount);

}}

这个合约引入了一些新的概念,让我们逐一解读。

address public minter; 这一行声明了一个可以被公开访问的 address 类型的状态变量。 address类型是一个160位的值,且不允许任何算数操作。这种类型适合存储合约地址或外部人员的密钥对。关键字 public 自动生成一个函数,允许你在这个合约之外访问这个状态变量的当前值。如果没有这个关键字,其他的合约没有办法访问这个变量。由编译器生成的函数的代码大致如下所示:

function minter() returns (address) { return minter; }

当然,加一个和上面完全一样的函数是行不通的,因为我们会有同名的一个函数和一个变量,这里,主要是希望你能明白——编译器已经帮你实现了。

相关文章
|
5月前
|
存储 算法 安全
dapp算力代币质押NFT项目系统开发|指南方案|合约搭建
区块链技术可以定义为一个由多个节点组成的,所有节点都能够查看
|
5月前
|
区块链
dapp质押代币系统开发|合约技术搭建
智能合约是一种通过计算机程序实现自动执行合约的协议。
|
5月前
|
人工智能 安全 区块链
DAPP合约代币质押系统开发方案需求|说明
区块链智能合约的发布方式不仅仅关乎技术手段,更是涉及到人性化和自然化的问题
|
10月前
|
算法 数据管理 区块链
区块链合约代币质押项目系统开发模式详情
多链是一种新兴的区块链技术,其分片技术被称为“多链分片”
|
5月前
|
存储 区块链
NFT卡牌代币质押DAPP系统开发|详情原理
去中心化应用是指基于区块链技术的应用,可以实现去中心化的数据存储和验证
|
存储 分布式计算 大数据
DAPP质押合约代币公排互助系统开发详情讲解
区块链和大数据都是新一代信息技术,它们的概念不同,应用领域也有着一定的区别
|
10月前
|
存储 安全 区块链
DAPP质押合约代币系统开发案例模式
在Web 3.0中,任何人都可以从任何地方参与,他们可以通过开源软件做出贡献
|
存储 区块链 UED
DAPP流动性质押系统开发方案与详情|DAPP合约案例
区块链的另一个固有挑战是其确定性。确定性本质意味着一旦一个块被添加到区块链中,它就无法更改,并且任何智能合约执行的结果都是可预测的和一致的。
|
算法 安全 区块链
DAPP流动性合约代币质押系统开发指南与方案
区块链技术带来的去中心化革命将对未来产生深远影响。
|
存储 安全 区块链
NFT智能合约系统开发|NFT铸造交易系统开发方案模式
智能合约可以通过分布式存储以及协议协商实现数据的可靠,从而实现不存在中心化