1. 区块链与凯亚概述

1.1. 什么是区块链?

区块链是一种分布式且不可篡改的数字账本,用于记录网络上发生的全部交易。链中每个区块包含若干加密交易,当新区块生成时,它与前一个区块紧密相连,形成一条连续的链条——未经检测无法进行修改。这种特性确保了高度的透明度和安全性,因为未经网络共识,信息无法轻易被篡改或删除,使区块链成为电子货币和智能合约等应用的基础技术。

1.2. 凯亚共识

共识机制:Kaia采用伊斯坦布尔BFT算法,这是PBFT(实用拜占庭容错)的改进版本,专为区块链网络优化设计。

目标:
  • 每秒可处理4,000笔交易的能力。
  • 即时完成交易的能力。
  • 区块生成时间 1 秒。
  • 支持超过50个共识节点参与该流程。
节点类型:
  • CN(共识节点):由CCO(核心单元操作员)管理,负责创建区块。
  • 代理节点(PN):提供与网络的接口。
  • EN(终端节点):为最终用户提供服务。
共识过程:

当交易被发送到区块链网络时(理事会) 来自PNs的, 可验证随机函数(VRF) 该函数用于随机选取1 委员会 由4个CN组成。将持续随机选取1个CN来创建 区块 以及另外3名临床护士的观察结果。当 区块 被创建时,该组中2/3的CNs 理事会 必须签署 区块 达成共识。

1.3. KLVM

KLVM,简称 凯亚虚拟机, 是一个运行在凯亚区块链网络上的去中心化虚拟机环境。 KLVM 支持智能合约的执行,这些程序会根据预先编码的条件自动执行交易或特定操作。智能合约使用Solidity等编程语言编写,随后编译为 字节码 那个 KLVM 能够理解并执行。 KLVM 兼容以太坊的 EVM因此它完全支持当前的开发工具, 操作码以及源代码。

1.4. 什么是智能合约?

A 智能合约 是一种计算机程序,旨在根据预先编程的条件自动执行、控制或确认事件和操作。它们存在并运行于 Kaia确保高度透明性和安全性,因为它们一旦部署就无法修改。 智能合约 帮助实现流程自动化,减少对中介机构的需求,并最大限度降低欺诈或错误的风险。它们用途广泛,可应用于金融、保险、供应链管理及房地产等多个领域。其发展 智能合约 正在开启我们互动和进行数字交易的新时代,为用户带来更高的效率、透明度和自主性。

1.5. 交易及其签署方式

在Kaia网络中,"交易"(transaction)指用户执行的操作,包括将KLAY(Kaia原生代币)或基于Kaia的代币从一个地址转移至另一个地址,或与智能合约进行交互。每笔交易包含以下信息:来源地址、目标地址、转账金额、gas(交易手续费),以及若交易涉及智能合约则包含可选数据。

在Kaia平台进行交易时,使用MetaMask等加密钱包签署交易是确保安全性的关键步骤。具体流程如下:

  1. 创建交易:用户输入交易所需信息,例如收款地址、金额等。 KLAY 或代币进行转移,以及Gas费用。例如在MetaMask中,用户可调整Gas费用水平以加快交易处理速度。
  2. 交易签名:输入交易信息后,钱包会生成一笔由用户私钥签名的数字交易。对该交易进行签名,既能证明用户有权使用交易发送地址,又无需泄露其私钥。
  3. 发送交易:签名的交易随后通过钱包(如Kaikas或MetaMask)发送到Kaia网络。网络将确认该交易并执行操作,按要求完成资金转移或与智能合约交互。
  4. 交易确认:最终,交易将由网络确认,相关信息将被记录在区块链上。用户可通过Etherscan等在线工具追踪交易状态。

该过程不仅有助于确保交易安全执行,更凭借区块链的透明性和不可篡改特性,有效防止交易遭到篡改或未经授权的修改。

2. Solidity 文件结构

2.1. SPDX 许可证标识符

所有Solidity合约都应在第一行声明许可证。

// SPDX-License-Identifier: MIT

SPDX 存储库中的许可证列表:https://spdx.org/licenses/

2.2. 语法规则

pragma 是用于声明Solidity编译器版本的关键词。 pragma 仅适用于当前本地文件,因此您必须添加 pragma 项目目录中的所有文件。

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

你可以使用 ^ 符号或比较运算符 <, <=, >, 结合编译器声明。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20; // 使用 0.8.20 及以上版本的编译器
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0; // use compiler version bigger or equal to 0.4.22 and less than 0.9.0

2.3. 从其他来源导入文件

导入整个文件

import "文件名"

导入全部并分配别名

import * 作为 符号名称 来自 "文件名";

名称导入

名称导入 这意味着你将指定从另一个文件导入的对象名称。你应该使用此选项的原因是它能使你的代码更清晰。

import {ContractOne as alias, ContractTwo} from "FileName";

2.4. 评论

要发表评论,您可以使用 // 以及 /* */

// 注释一行。

/*
注释用于
多行注释
*/

还有 国家规范 评论 ////** **/

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.16 <0.9.0;

/// @author The Project Team
/// @title A simple storage example
contract SimpleStorage {
    uint storedData;

    /// Store `x`.
    /// @param x the new value to store
    /// @dev stores the number in the state variable `storedData`
    function set(uint x) public {
        storedData = x;
    }

    /// Return the stored value.
    /// @dev retrieves the value of the state variable `storedData`
    /// @return the stored value
    function get() public view returns (uint) {
        return storedData;
    }
}

3. 合同结构

3.1. 状态变量

状态变量 在合约开头声明的变量,位于作用域之外 局部变量 在……中宣布 函数.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract SimpleStorage {
    uint storedData; // State variable
    // ...
}

3.2. 函数

功能 函数是用于执行计算、改变变量值等操作的声明。示例: 函数 如下所示。

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.1 <0.9.0;

contract SimpleAuction {
    function bid() public payable { // Function
        // ...
    }
}

// Helper function defined outside of a contract
function helper(uint x) pure returns (uint) {
    return x * 2;
}

3.3. 函数修饰符

函数修饰符 是声明 函数 为实施该行动创造条件 函数.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.22 <0.9.0;

contract Purchase {
    address public seller;

    modifier onlySeller() { // Modifier
        require(
            msg.sender == seller,
            "Only seller can call this."
        );
        _;
    }

    function abort() public view onlySeller { // Modifier usage
        // ...
    }
}

3.4. 事件

活动 是用于记录智能合约活动的功能。 活动 常用于构建基于智能合约的交互式用户界面。

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.22;

event HighestBidIncreased(address bidder, uint amount); // Event

contract SimpleAuction {
    function bid() public payable {
        // ...
        emit HighestBidIncreased(msg.sender, msg.value); // Triggering event
    }
}

3.5. 错误

错误 用于告知用户操作失败的原因,以及 错误 具有较低的 气体 成本比返程高 字符串.

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

/// Not enough funds for transfer. Requested `requested`,
/// but only `available` available.
error NotEnoughFunds(uint requested, uint available);

contract Token {
    mapping(address => uint) balances;
    function transfer(address to, uint amount) public {
        uint balance = balances[msg.sender];
        if (balance < amount)
            revert NotEnoughFunds(amount, balance);
        balances[msg.sender] -= amount;
        balances[to] += amount;
        // ...
    }
}

3.6. 结构体类型

结构体 用于声明一个 类型对象.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract Ballot {
    struct Voter { // Struct
        uint weight;
        bool voted;
        address delegate;
        uint vote;
    }
}

3.7. 枚举类型

枚举 用于声明一个 类型 其值为 常数.

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.4.0 <0.9.0;

contract Purchase {
    enum State { Created, Locked, Inactive } // Enum
}